Модель значения атрибута сущности (EAV) и как этого добиться с помощью cfml? - PullRequest
2 голосов
/ 17 июня 2011

http://oi55.tinypic.com/14lho28.jpg

Я пытаюсь выяснить, как реализовать эти отношения в Coldfusion. Также, если кто-то знает название для такого рода отношений, мне было бы интересно узнать его.

Я пытаюсь создать коричневый стол.

Воссоздание таблицы из значений не проблема, проблема, с которой я застрял пару дней, заключается в том, как создать среду редактирования.

Я думаю, что у меня должна быть таблица со всеми Tenants и TenantValues ​​(TenantValues, которые соответствуют TenantID, который я редактирую), а также с пустыми значениями (зеленая таблица)

есть другие предложения?

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Имя этого отношения называется Модель значения атрибута объекта (EAV). В вашем случае Tenant, TenantVariable, TenantValues - это таблицы сущностей, атрибутов и значений соответственно. EAV - это попытка разрешить определение или сущности во время выполнения, и больше всего я нашел в моем опыте поддержки систем управления контентом. Она была названа моделью базы данных anti pattern , потому что вы теряете некоторые преимущества СУБД, в то же время получая такие недостатки, как необходимость блокировки нескольких таблиц при удалении или сохранении. Часто подходящей альтернативой персистентности является решение NoSQL, такое как Couch .

Что касается правок, то парадигма, которую я обычно вижу, это удаление всех записей значений для данного идентификатора и вставка в цикл, а затем обновление записи таблицы сущностей. Сделайте это внутри транзакции, чтобы обеспечить согласованность . Результатом этого подхода является то, что его проще понять, чем алгоритм обнаружения дельты. Другой вариант - использование оператора MERGE, если ваша база данных поддерживает его.

2 голосов
/ 17 июня 2011

Вы можете рассмотреть RDF Triple Store для этой проблемы.Это альтернатива реляционным БД, которая особенно хороша для разреженных категориальных данных.Данные представлены в виде троек - ребер ориентированного графа , состоящих из субъекта, объекта и предиката, описывающего свойство, связывающее их:

(subject) (predicate) (object)

Некоторые примеры троек из вашего набора данныхбудет выглядеть примерно так:

<Apple> rdf:type <Red_Fruit>
<Apple> hasWeight "1"^^xsd:integer

Тройные хранилища RDF предоставляют язык запросов SPARQL для извлечения данных из вашего хранилища так же, как вы используете SQL.

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