Какой тип структуры таблицы базы данных это называется? - PullRequest
2 голосов
/ 16 июля 2009

Давным-давно я взял на себя обслуживание системы управления веб-контентом, в которой была довольно умная таблица базы данных.

Структура таблицы была такой:

ТАБЛИЦА: tPage (ПК на PageID, Версия, Статус)

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

ТАБЛИЦА: элементы (PK на 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.

Чтобы получить основной основной текст текущей домашней страницы, вы должны написать запрос вроде:

Запрос:

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

Результат:

We sell sprockets.

Прелесть этой структуры таблицы (по крайней мере для меня) заключалась в том, что мне не нужно было добавлять новые столбцы в таблицу, когда я хотел добавить новые типы данных. Я только что создал новое ElementName. Но функционально это было похоже на новый столбец.

С тех пор я использовал это расположение в нескольких других проектах, где мне была нужна база данных, которая легко изменялась бы по мере добавления новых функций / типов контента. Например, в моем приведенном выше примере CMS мы начали с использования только IntroText и MainBody, но через несколько лет мы получили CoursePrice, ContactPerson, RelatedCourses, SetupFee, и я нашел этот способ организации наших данных очень гибким.

Мой вопрос: как называется этот тип структуры таблицы? Я не совсем уверен, по каким ключевым словам мне нужно поискать для получения дополнительной информации.

1 Ответ

3 голосов
/ 16 июля 2009

Это называется "entity-attribute-value" или "EAV".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...