2009-07-16 6 views
2

Il y a longtemps, j'ai pris en charge la maintenance d'un système de gestion de contenu basé sur le Web avec une table de base de données plutôt intelligente.Quel type de structure de table de base de données est-ce appelé?

La structure de la table était comme:

TABLE: tpage (PK sur PageID, version, statut)

PageID, PageTitle, Version, Status 
1,  Homepage, 1,  Archived 
1,  Homepage, 2,  Live 
1,  New Home, 3,  Draft 

TABLE: tElements (PK sur PageID, Version, ElementName)

PageID, Version, ElementName, ElementValue (nText) 
1,  1,  IntroText, Hi, this is our first version. 
1,  2,  IntroText, This is the current version, 
1,  2,  MainBody, We sell sprockets. 
1,  3,  IntroText, Welcome text here 
1,  3,  MainBody, We sell sprockets and widgets. 

Pour obtenir le corps du texte de la page d'accueil actuelle, vous pouvez écrire une requête comme:

Requête:

SELECT ElementValue 
FROM tElements, tPage 
WHERE PageID  = 100 
     ElementName = 'MainBody' 
AND tPage.PageID = tElements.PageID 
AND tPage.Version = tElements.Version 
AND tPage.Status = 'Live' 

Résultat:

We sell sprockets. 

La beauté de cette structure de la table, (pour moi au moins) était que je ne l'ai pas besoin d'ajouter de nouvelles colonnes à une table quand je voulais ajouter de nouveaux types de données. Je viens de créer un nouveau ElementName. Mais fonctionnellement c'était comme une nouvelle colonne. J'ai depuis utilisé cet arrangement dans quelques autres projets où j'avais besoin d'une base de données qui changerait facilement à mesure que de nouvelles fonctionnalités/types de contenu seraient ajoutés. Par exemple, dans mon exemple de CMS ci-dessus, nous avons commencé avec IntroText et MainBody, mais quelques années plus tard nous avons fini avec CoursePrice, ContactPerson, RelatedCourses, SetupFee, et j'ai trouvé cette façon d'organiser nos données très flexible.

Ma question est: comment s'appelle ce type de structure de table? Je ne sais pas vraiment quels mots-clés je devrais googler pour plus d'informations.

Répondre

3

On l'appelle "entity-attribute-value" ou "EAV".

+0

Merci ChrisW, je viens de rechercher entité-attribut-valeur sur Wikipedia et il décrit exactement. À la votre! – Brontojoris

Questions connexes