对于我正在开发的应用程序来说,这是一个棘手的设计问题。我的应用程序中有两个不同的项目,它们都将使用注释。什么,但我无法决定如何设计我的数据库。
这里有两种可能性。第一个是需要注释的每个表的不同注释表(规范化方式):
movies -> movie_comments
articles -> article_comments
我想到的第二种方式是使用通用的注释表,然后在注释和电影|文章关系中有很多关系。例如
comments
comments_movies (movie_id, comment_id)
comments_articles (article_id, comment_id)
你对最好的方法有什么看法,你能否给出一个很好的理由让我决定。
答案 0 :(得分:4)
我个人选择第二个解决方案
comments
comments_movies (movie_id, comment_id)
comments_articles (article_id, comment_id)
仅在逻辑评论模型的表模型上维护更简单,例如当你不想为评论添加一些功能时你只需要做一次或当你不计算特定用户的评论时更容易,因为有一个表
当然有其他人可以写下他在多个表格中保留它的优点,但你要求的意见所以这里是我的:)
答案 1 :(得分:1)
将它们分开可以支持变更,而不会影响对其他实体(电影与文章)的评论。假设对文章与电影的评论属性存在差异。否则...
我想可能需要在文章和电影中显示评论。但是,如果您希望将来为其他实体提供评论功能,合并也会支持。
答案取决于您目前的需求,并最好猜测您将来想做什么。更多细节有助于我们了解建议内容。
答案 2 :(得分:1)
没有“最佳”方法,因为它是一个直接的标准化问题:提案要么正确标准化,要么不标准化。
实际上,第一个选项是不标准化,标准化未完成。您在两个表中具有相同的重复列组,这些列尚未标识并分组到单个表中。
第二个选项 标准化。您已经确定了这一点,并将它们放在一个表中。
然后,在逻辑层面,您在电影和评论之间以及文章和评论之间存在多对多关系(不是表格)。逻辑层面的故事结束。
在物理层面,n :: n关系实现为关联表,你有CommentMovie和CommentArticle。
随着Db的扩展和增长,生活很简单,因为:
任何与Movie.PK为1 :: 1的新列都放在电影中
任何带有Article.PK的1 :: 1的新列都放在文章中
任何带有Comment.PK的1 :: 1的新列都放在Comment
任何带有CommentArticle.PK的1 :: 1的新列(关系; PK如图所示(ArticleId,CommentId))都放在CommentArticle中。这(将属性添加到n :: n关系)现在将导致表显示在逻辑模型上。
任何带有CommentMovie.PK的1 :: 1的新列(关系; PK如图所示(MovieId,CommentId))都放在CommentMovie中。这(将属性添加到n :: n关系)现在将导致表显示在逻辑模型上。
答案 3 :(得分:0)
我建议你选择第二个:
movies -> movie_comments -> comments
articles -> article_comments -> comments
一个评论表,两个透视表(多对多)。
这会将所有相同的数据保存在一个表中,只是松散地链接它们。如果你可以通过连接逃脱,我通常会建议那些不需要扩展的东西,因为加入可能是一个性能损失和案件的噩梦。但这对你的情况最好。
答案 4 :(得分:-1)
comment_table
-------------
comment_id (int)
object_id (int)
comment (varchar(max))
type (int)
--------------
object_id是指电影,文章等对象。
输入等于1 :对电影做了评论, 输入等于2 :对文章
进行了评论您可以像这样设计表格。