2012-04-10 6 views
2

Предполагая конструкцию базовой таблицы (№ 3). Из этой ссылке:Лучший способ смешать полиморфную ассоциацию и иерархию?

What is the best way to implement Polymorphic Association in SQL Server?

enter image description here

Я хотел бы добавить (к таблице объектов) а ObjectType и parentObjectID для каждого object.ObjectID. Мне нужно это, потому что у меня есть объекты, которые являются дочерними для других объектов. Эти дочерние объекты могут иметь дочерние объекты только разных типов (отличные от типа self).

. Стоит ли размещать имена таблиц в столбце objectType? Это может быть плохо для безопасности, чтобы сохранить часть схемы в таблице ... Любой другой подход, который я могу использовать?

Вот пример:

Таблица сообщений -> ID | ObjectID (fk ref. Object.ObjectID) | Содержание
Таблица Комментарии -> id | ObjectID (fk ref. Object.ObjectID) | Добавлено_on_ObjectID (fk ref. Object.ObjectID) | Содержание

В основном сообщения и комментарии будут уникальными объектами в таблице объектов super. Но поскольку комментарии могут быть сделаны только для почтовых объектов, а не для суждений комментариев, я должен хранить типы для каждого объекта (ObjectID).

+0

Я предполагаю, что Object1, object2 и т. Д. Являются типами объектов, определенными в родительской таблице объектов. Вы хотите динамически создавать ** новые таблицы, если новые типы объектов добавляются в родительскую таблицу? – jerrymouse

+0

@jerrymouse Нет, например: у нас есть объект объектов и объектов post. Комментарии допускаются для объектов post, но не для объектов комментариев. Вот почему мне нужно хранить типы. –

+0

, вы должны были упомянуть этот пример в своем вопросе для получения лучшего ответа. В этом случае, я думаю, вам придется определять отдельные таблицы для каждого типа объекта. Что означает эта строка: «Эти дочерние объекты могут иметь дочерние объекты только разных типов». – jerrymouse

ответ

0

Я думаю, вы можете сделать это в отдельной таблице, указав собственный внешний ключ.

Objects | id | parent_object_id | name 
--------+----+------------------+----------------------------- 
      1 | NULL    | Object1 
      2 | NULL    | Object2 
      3 | NULL    | Object3 
      4 | 1    | Child Object of 1 
      5 | 2    | Child Object of 2 
      6 | 3    | Child Object of 3 
      7 | 4    | Sub Child Object of 1 -> 4 
      8 | 5    | Sub Child Object of 2 -> 5 
+0

Да, но хорошо ли хранить данные таблицы в другой таблице (соображения безопасности)? Я спросил об этом в конце вопроса? –

+1

Вопросы, связанные с безопасностью, не являются тривиальными для ответа. В вашем случае я бы не стал беспокоиться о вложении конкретных приложений в базу данных. Защита сервера базы данных должна быть чужой работой. –

+0

@AdamHouldsworth Да, у меня тоже были сомнения, если я должен моделировать db, чтобы упростить правила приложения (думал о производительности). Тогда я оставляю это правило только на приложении lvl. –

Смежные вопросы