确定关系中的主表和外表?

时间:2009-09-15 20:21:16

标签: sql sql-server sql-server-2005 tsql

在设计数据库时,通常决定哪些表将成为关系中的主表和外表?

例如,如果我有一个名为posts的表,它包含和id列postid,我有一个名为comments的表,它包含一个名为postid的列。这些表中的哪一个是关系中的主要表。我认为它是帖子表。我之所以这样说是因为这是一对多的关系,看起来有一个条目的表将是主要的表,而具有多个表的表将是外表。

多对多关系或1对1关系如何,这些场景中的主要和外来表是什么?

4 个答案:

答案 0 :(得分:4)

主表包含父记录,这些记录定义根记录,例如本例中的“posts”。

外部表包含子记录,即以相关方式将数据添加到父记录的记录。

因此,“评论”是“帖子”的孩子,因此:   “发布”是父级(在您的示例中为primary)   “评论”是孩子(在你的例子中是外国人)

PostId值在Post表中必须是唯一的... 但是在Comment表中可以多次出现相同的PostId值(因为单个帖子可能有很多评论;评论1用于帖子1,评论2用于帖子1)。

1-1关系是指两个实体是同伴。即,学生可以是用户,用户可以是学生。两个学生不能是同一个用户。两个用户不能是同一个学生。因此,用户 - 学生是1-1。

多对多的关系最好用中间的表格建模。

书(小学)
作者(小学)
AuthorBooks(制图)

BookId在书籍中是独一无二的(只有一本书可能有一定的id) AuthorId在作者中是唯一的(只有一位作者可能具有某个ID)

AuthorBooks同时拥有BookId和AuthorId列,并将书籍映射到作者。

这种关系是建模的,因为作者可能写了很多书,而且某本书可能有很多作者。

答案 1 :(得分:3)

假设:

table posts
post_id

table comments
comment_id
post_id

table posts_to_comments
post_comment_id
post_id
comment_id
  • posts.post_id是表格帖子的主键。
  • comments.comment_id是表格评论的主键。
  • comments.post_id是表格帖子的外键。

当你想到它时,帖子就是你的“主要”表。

对于许多人的关系:(这里没有多大意义,但无论如何)

  • posts_to_comments.post_comment_id is primary key
  • posts_to_comments.post_id is foreign key to posts
  • posts_to_comments.comment_id is foreign key to comments

答案 2 :(得分:2)

我从未听说过用于表示桌子的主要和外国人。它们是列的特征。

在您给出的示例中:

    帖子中的
  • ,postid列是表格的主键
  • 在Comments中,postid列是表Comments的常规字段,并在表Posts中指定一个唯一的行;它被称为帖子的外键(=另一个表的键)。

答案 3 :(得分:1)

对于多对多关系,例如网络用户,网络可以拥有多个成员,用户可以属于多个网络,您需要引入第三个表,可以称之为(选择你认为最合适的):

  • Networks_Have_Members
  • Users_BelongsTo_Networks
  • NetworkMembers

此表将包含一个复合主键,由userId和networkId组成。此外,userId将引用Users.id作为外键,networkId将引用Networks.id作为外键。