Если в вашем распоряжении есть много подтипов или если необходимо часто обеспечивать поддержку новым атрибутам, можно добавить столбец BLOB для хранения данных в форматах XML или JSON, которые позволяют кодировать как имена атрибутов, так и их значения. Эту модель Мартин Фоулер назвал Сериализованный LOB.
Смотрите также здесь.
Файл npunepa:_EAV/soln/create-blob-tables.sql
CREATE TABLE Issues (
issue_id SERIAL PRIMARY KEY,
reported_by BIGINT UNSIGNED NOT NULL,
product_id BIGINT UNSIGNED,
priority VARCHAR(20),
version_resolved VARCHAR(20) ,
status VARCHAR(20),
issue_type VARCHAP(IO), — ОШИБКА или ФУНКЦИЯ
attributes TEXT NOT NULL, — все динамические атрибуты для строки
FOREIGN KEY (reported_by) REFERENCES Accounts(account_id), FOREIGN KEY (product_id) REFERENCES Products(product_id)
) ;
Преимущество данной структуры — ее полная расширяемость. Новые атрибуты можно сохранить в столбце blob в любой момент времени. В каждой строке хранится потенциально индивидуальный набор атрибутов, поэтому в вашем распоряжении столько же подтипов, сколько строк.
Недостаток здесь в том, что в SQL предоставляется слабая поддержка доступа к конкретным атрибутам в такой структуре. Невозможно запросто выбрать отдельные атрибуты в столбце blob для ограничения, основанного на строках, вычисления составного значения, сортировки и других операций. Требуется выбрать весь столбец blob атрибутов в качестве одиночного значения и написать прикладной код, чтобы декодировать и интерпретировать атрибуты.
Данная структура оптимальна, когда нельзя ограничиться конечным набором подтипов и когда требуется полная гибкость для определения новых атрибутов в любой момент времени.
Опубликовал vovan666
June 28 2013 17:42:58 ·
0 Комментариев ·
3738 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.