Вернёмся к вопросу того, что антипаттерн нарушает правило двумя способами. Их и рассмотрим.
Во-первых, EAV-таблица моделирует сущность, которая может иметь пользовательский набор атрибутов для каждого экземпляра класса, поэтому сущность не будет связана с заголовком, определяющим ее атрибуты.
Во-вторых, EAV-столбец attr_value содержит все атрибуты сущности, такие, как статус ошибок, учетная запись, с которой было произведено присвоение значения ошибке и т.д. Данное значение, например 1234, в этом столбце может быть корректным для двух различных атрибутов, но иметь совершенно другой смысл.
Антипаттерн в главе также нарушает это правило, так как данное значение (1234) ссылается на первичный ключ какой-либо из родительских таблиц. Нельзя сказать, что 1234 в одной строке означает то же самое, что 1234 в другой строке.
Строки не имеют скрытых компонентов
Столбцы содержат значения данных, а не физические индикаторы памяти, например, идентификационные номера строк или объектов. Ранее мы убедились, что первичные ключи уникальны, но они не являются номерами строк.
Некоторые СУБД избегают этого правила, предоставляя вам доступ к деталям внутренней памяти при помощи расширений SQL (например, псевдостолбец ROWNUM СУБД Oracle или псевдостолбец 01D в СУБД PostgreSQL). Однако эти значения не являются, по сути, частью реляции.
Опубликовал vovan666
August 27 2013 12:43:07 ·
0 Комментариев ·
4171 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.