Давным-давно я взял на себя обслуживание системы управления веб-контентом, в которой была довольно умная таблица базы данных.
Структура таблицы была такой:
ТАБЛИЦА: 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, и я нашел этот способ организации наших данных очень гибким.
Мой вопрос: как называется этот тип структуры таблицы? Я не совсем уверен, по каким ключевым словам мне нужно поискать для получения дополнительной информации.