我正在创建一个简单的博客应用程序,到目前为止,我有3个表,帖子,评论和作者。
我将列出每个表的主键以及外键。
帖子将postid作为主键。
评论将包含commentid作为主键并将postid作为外键。
帖子与评论有0到多的关系。
作者将包含authorid作为主键。
作者将与帖子建立多对多关系,并与评论建立多对多的关系。
最后一句是我遇到的最麻烦的地方。作者实际上是否与帖子和评论存在多对多的关系,或者它是一对一的。如果它是多对多的,我听说有一个中间表描述帖子 - 作者和评论 - 作者之间的关系是一个好主意,但我不确定我会在这个表中使用哪些键?
如果我口头表达它作为一个作者可以写很多帖子,很多帖子都可以由一位作者写,我把它看作一对多,但是如果我从表中存储的实际数据中查看它如帖子将包含多个帖子,作者将包含多个作者,然后它似乎是多对多,所以这是交叉引用表的用途,以删除重复。
答案 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
,它将包含以下列:id
,author_id
,post_id
。每行表示“作者X和帖子Y相关。”