如何设计具有更高嵌套级别的表格?

时间:2016-09-21 09:54:06

标签: c# sql database database-design relational-database

我正在制作一个在线电影数据库作为C#的学校项目。此刻我正在研究数据库模型。在我的电影数据库中,您可以评论新闻文章,电影和评论本身。正如您在下面的图像链接中看到的,我设计了一个注释表,如果它是对注释的注释,则可以有Article_ID或Movie_ID,或者没有。这是一个好习惯吗?

http://s17.postimg.org/dg6wnp6jz/comment_table.png

我的直觉说没有。创建更多表格不是更好吗?一个用于电影评论,一个用于新闻评论,一个用于评论评论?或者为它制作连接表更好吗?

处理这种更高级别的嵌套有什么好的做法? [想想对评论的评论,评论也有评论]

提前致谢。

3 个答案:

答案 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

你将在同一张桌子上得到所有的荣誉。可以通过日期时间轻松识别新旧评论,并且可以通过父关系字段

来识别评论之间的关系

这种结构是嵌套模型结构的一个很好的替代品;你将有更少的阅读努力(单个表 - 单个查询),你的写事务将是原子的。