帮助db模式?

时间:2009-09-17 16:17:06

标签: sql-server database-design data-modeling

我正在创建一个简单的博客应用程序,到目前为止,我有3个表,帖子,评论和作者。

我将列出每个表的主键以及外键。

帖子将postid作为主键。

评论将包含commentid作为主键并将postid作为外键。

帖子与评论有0到多的关系。

作者将包含authorid作为主键。

作者将与帖子建立多对多关系,并与评论建立多对多的关系。

最后一句是我遇到的最麻烦的地方。作者实际上是否与帖子和评论存在多对多的关系,或者它是一对一的。如果它是多对多的,我听说有一个中间表描述帖子 - 作者和评论 - 作者之间的关系是一个好主意,但我不确定我会在这个表中使用哪些键?

如果我口头表达它作为一个作者可以写很多帖子,很多帖子都可以由一位作者写,我把它看作一对多,但是如果我从表中存储的实际数据中查看它如帖子将包含多个帖子,作者将包含多个作者,然后它似乎是多对多,所以这是交叉引用表的用途,以删除重复。

7 个答案:

答案 0 :(得分:7)

我认为撰写帖子/评论的作者将是一对多的关系,除非您计划支持帖子可能有多个作者的情况。也许这是有道理的,但似乎不太可能很多人会使用它。对于可能有0.1%的用户需要的功能,我不会打扰我的架构复杂化。

只需将authorId放在帖子和评论表上,你就应该好了。

答案 1 :(得分:4)

除非您正在运行一种特殊的论坛,否则规则肯定是

  • 作者可以写很多帖子
  • 邮政必须有一个且只有一个 作者
  • 作者可以写很多评论
  • 评论必须有一个而且只有一个 作者

答案 2 :(得分:2)

不,这只是一对多。帖子或评论只能有一位作者 - 对吗?

所以你只需要在帖子和评论表中使用外键AuthorID

答案 3 :(得分:2)

如果我口头表达它作为一个作者可以写很多帖子,很多帖子都可以由一位作者写,我把它看作一对多,但是如果我从表中存储的实际数据中查看它如帖子将包含多个帖子,作者将包含多个作者,然后它似乎是多对多,所以这是交叉引用表的用途,以删除重复。

我看到你感到困惑的地方。 “帖子表将包含多个帖子”和“作者表将包含多个作者”是真的,但这不是你想要表达的关系。 (这只是表的本质 - 作者表将有许多行,每个行代表一个作者。)

关键的是,对于某个帖子,它会有多少作者?一个还是多个?对于给定的作者,它会有多少个帖子?一个还是多个?

答案 4 :(得分:1)

中间的交叉引用表看起来像这样:

create table PostsToAuthors (
    postToAuthorsId int primary key,
    postId int,
    autorId int
);

作者和帖子之间的每个关联都要求在此表中创建记录。请注意,此表包含您想要在这样的表上的约束(外键和唯一的)。

答案 5 :(得分:1)

我会在表Posts和Comments中再添加一列来存储作者的外键。通常,帖子和评论只有一个作者。

所以你的架构看起来像这样:

Posts
    postid - primary key
    authorid - foreign key
Comments
    commentid - priamry key
    postid - foreign key
    authorid - foreign key
Authors
    authorid - primary key

Authors-comments - one(zero) to many relationship
Authors-posts - one(zero) to many relationship
Posts-comments - one(zero) to many relationship

答案 6 :(得分:1)

  

作者会有很多对很多人   与帖子和许多人的关系   许多与评论的关系。

所以你说每个作者都有很多帖子,每个帖子都有很多作者?评论也一样吗?

如果您正在制作维基,那么,但在大多数情况下,给定的帖子或评论只会有一位作者。那是你的意思吗?

无论如何,假设存在实际的多对多关系。您将创建一个关系表,例如,名为authors_posts,它将包含以下列:idauthor_idpost_id。每行表示“作者X和帖子Y相关。”