3 стол в 1 стол - PullRequest
       2

3 стол в 1 стол

1 голос
/ 13 августа 2011

Допустим, у нас есть 3 таблицы для contents, galleries, questions и одна таблица для comments, например:

**Contents**
--------------
ContentID | Title | Body

**Galleries**
--------------
GalleryID | Title | Rank

**Questions**
-------------
QuestionID | Title | Body | SendDate

**Comments**
------------
CommentID | Name | Body | ContentID | GalleryID | QuestionID

Какой стандартный способ подключения Commentsстол на другие 3 стола?Это правильный способ использовать внешние ключи трех других таблиц внутри таблицы Comments?

Ответы [ 4 ]

2 голосов
/ 13 августа 2011

Это правильно, но лучше иметь Commentable Table, от которой наследуются другие 3 таблицы.что-то вроде этого:

Commentable(CID, title)

Все содержимое, галереи и вопросы сначала должны быть вставлены в Commentable, а затем в свои собственные таблицы.Таким образом, другие таблицы будут выглядеть так:

Contents( CID, Body)
Galleries(CID, Rank)
Questions(CID, Body, SendDate)

И комментарий будет связан с комментируемым, поэтому

Comments(CommentID, Name, Body, CID)

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

0 голосов
/ 13 августа 2011

Это правильный путь, если каждый комментарий связан с одним элементом контента, одним элементом галереи и одним вопросом.

Если каждый комментарий связан только с элементом контента, элементом галереи или вопросом,вы должны использовать три таблицы для их соединения, как показал Маттен.

0 голосов
/ 13 августа 2011

Другой подход заключается в использовании таблиц соединителей, но вам потребуется три из них:

Contents       ContentComments   
- ContentID    - ContentID            <-- (ContentID,CommentID) as PK, 
...            - CommentID                ContentID as FK, CommentID as FK...

Galleries      GalleryComments
- GalleryID    - GalleryID
...            - CommentID

Questions      QuestionComments
- QuestionID   - QuestionID
...            - CommentID

Comments
- CommentID
- Name
- Body
0 голосов
/ 13 августа 2011

Да, это стандартный способ соединения таблиц, если вы хотите связать Comments с Questions, подключенным к определенному Contents в определенном Galleries.

Но еслиQuestions относится только к конкретному Contents, а Contents просто существует в конкретном Galleries, ваша модель будет больше похожа на

Contents
--------------
ContentID
GalleryID
Title
Body


Galleries
--------------
GalleryID
Title
Rank


Questions
-------------
QuestionID
ContentID
Title
Body
SendDate


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