我正在制作一个在线电影数据库作为C#的学校项目。此刻我正在研究数据库模型。在我的电影数据库中,您可以评论新闻文章,电影和评论本身。正如您在下面的图像链接中看到的,我设计了一个注释表,如果它是对注释的注释,则可以有Article_ID或Movie_ID,或者没有。这是一个好习惯吗?
http://s17.postimg.org/dg6wnp6jz/comment_table.png
我的直觉说没有。创建更多表格不是更好吗?一个用于电影评论,一个用于新闻评论,一个用于评论评论?或者为它制作连接表更好吗?
处理这种更高级别的嵌套有什么好的做法? [想想对评论的评论,评论也有评论]
提前致谢。
答案 0 :(得分:0)
解决方案的适当性可能取决于开发框架。
如果这是Ruby on Rails,我会说你所拥有的是多态关系,其中注释表将包含列" commentable_type"和" commentable_id"。 commentable_type将包含关联表(或模型,在Rails术语中)的名称,例如"电影","文章","评论"等等,以及commentable_id将包含其主键。
这通常意味着您无法使用数据库外键约束,并且必须依赖应用程序强制完整性。
答案 1 :(得分:0)
也许创建一个引用评论表的回复表
答案 2 :(得分:0)
您可以使用带有父引用的模型树结构,例如:
<强>电影讯息强>
id | movie_id | post_text | date_of_post | post_author
----------- -------- -------------------- ------------ -----------
post_movie1 | movie1 | the post about movie | today | one author
<强>电影讯息-评论强>
id | movie_post_id | parent_comment_id | comment_text | datetime_of_comment | commenter
----- --------------- | ---------------- ----------------------------------- | ------------------- | ----------------
comm1 | post_movie1 | null | first comment about movie1 | today 10:10:01 | user one
comm2 | post_movie1 | null | second comment about movie1 | today 10:50:01 | user two
comm3 | post_movie1 | comm2 | first commet about comm2 of movie1 | today 11:10:10 | user one
comm4 | post_movie1 | null | another comment about movie1 | today 12:15:00 | other user
comm5 | post_movie1 | comm2 | second comment about comm2 movie1 | today 16:50:01 | user two
你将在同一张桌子上得到所有的荣誉。可以通过日期时间轻松识别新旧评论,并且可以通过父关系字段
来识别评论之间的关系这种结构是嵌套模型结构的一个很好的替代品;你将有更少的阅读努力(单个表 - 单个查询),你的写事务将是原子的。