Как использовать EAV для проектирования объекта на основе класса, атрибута и значения? - PullRequest
1 голос
/ 30 ноября 2011

Я хочу спроектировать систему, в которой пользователь может гибко определять класс, объект, атрибут и значение, и объекты могут связываться с классом (ами), затем получать атрибуты класса и затем иметь значения для каждого атрибута.

Я хочу установить несколько значений для какого-либо атрибута, например, если у объекта есть 2 номера телефона на 2 места (телефон и номер являются атрибутами класса местоположения) Я хочу знать, какой телефон для какого места для 1объект?Какой дизайн лучше?

Мой дизайн похож на:

  • Класс: Id, Name
  • Объект: Id, Name
  • ClassObject: Id, ClassId, ObjectId
  • Атрибут: Id, Name, ClassId
  • Значение: Id, ClassObjectId, AttributeId, Value

1 Ответ

0 голосов
/ 28 декабря 2011

Ответ на вопрос о дизайне:
Чтобы связать телефон и место, вы должны использовать дополнительный класс «место» и присвоить атрибут «телефон» классу «место». Экземпляр класса "location" может иметь 2 экземпляра класса "place".

Для этого необходимо иметь еще две таблицы:

  • «ссылка»: Id, SourceId, TargetId, RelationId
  • "отношение": Id, SourceClassId, TargetClassId, Имя

Btw. Ваша метамодель интересна: она очень гибкая, позволяя объекту принадлежать нескольким классам.
Следовательно, вы можете выразить: Объект "Арнольд Шварценеггер" относится к классам: Бодибилдер, Иммигрант, Актер, Автор книг, Бизнесмен, Политик.

С другой стороны, у вас нет отношений наследования / подтипа между классами. Кажется, у вас нет явного объявления типа значения в определении атрибута.

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