Наследование таблиц классов с иерархией - PullRequest
0 голосов
/ 25 августа 2010

У меня есть 3 типа данных с - a) общими столбцами b) иерархией - и я хотел бы знать, как проектировать базу данных.

Допустим, на верхнем уровне есть обсуждение. Внутри этого есть Обсуждение сообщений, файлов и комментариев. Все они имеют общие поля (UserID, CreateDate, Text), но также имеют уникальные столбцы (FileName, ContentType и т. Д.). Комментарии могут быть связаны с любым типом (даже другими комментариями) и такими же с файлами.

Изучив некоторые вопросы здесь, я думаю, что хочу наследование таблиц классов - одна базовая таблица (DiscussionParts) для хранения общих элементов, а затем конкретные таблицы для каждого типа данных.

DiscussionParts : PartID, DiscussionID, ParentID, PartType (M, F, C), UserID, Text, CreateDate

Сообщения : MessageID, PartID, Title

Файлы : FileID, PartID, FileName, ContentType

Комментарии : CommentID, PartID, Source

Столбец ParentID предназначен для отслеживания иерархии. Параметр DiscussionID позволяет пользователю искать текст во всех своих обсуждениях одним простым запросом.

Это рекомендуемый дизайн для наследования таблиц классов с иерархией?

1 Ответ

1 голос
/ 15 января 2011

Я бы предложил изменить это с точки зрения сущностей и, возможно, функциональности, а не классов. Причина в том, что базы данных не выполняют «классы» и «наследование», и приведение их таким образом может привести к неэффективному проектированию.

Звучит так: «... на верхнем уровне есть обсуждение». Означает, что это ваша верхняя таблица, предположительно имеющая идентификатор, заголовок и, возможно, некоторый текст, описывающий содержание сообщения.

Исходя из этого, ваша таблица сообщений является дочерней для обсуждений, с идентификатором обсуждения в качестве внешнего ключа, идентификатором сообщения, заголовком, текстом и т. Похоже, вы создаете форум, пока все хорошо.

Комментарии немного сложнее. Предположительно комментарии добавляются в сообщения? Это означает, что ваша таблица комментариев имеет внешний ключ к сообщениям, а также собственный комментарий и некоторый текст.

Но из вопроса я не могу понять, куда приходят файлы. Они прикреплены к дискуссии в целом? Сообщение? Или комментарий? Каким бы ни был ответ на этот вопрос, сделайте таблицу файлов дочерней по отношению к соответствующей таблице.

Итак, ваша иерархия не из классов, а из таблиц и выглядит следующим образом:

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