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

本文关键字:嵌套 高嵌套 | 更新日期: 2023-09-27 18:08:16

我正在用c#制作一个在线电影数据库作为学校的项目。此时此刻,我正在研究数据库模型。在我的电影数据库中,你可以评论新闻文章、电影和评论本身。正如你可以看到在下面的图片链接,我设计了一个评论表,它可以有一个Article_ID或Movie_ID或没有他们,如果它是评论的评论。这是一个好的实践吗?

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

我的直觉告诉我不是。创建更多的表不是更好吗?一个是电影评论,一个是新闻评论还有一个是评论评论?还是制作连接表更好?

处理这种高级嵌套的好做法是什么?[想想评论上的评论,评论本身也有评论]

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

可以使用带有父引用的模型树结构,例如:

movie-posts

id          | movie_id | post_text            | date_of_post | post_author
-----------   --------   --------------------   ------------   -----------
post_movie1 | movie1   | the post about movie | today        | one author  

movie-posts-comments

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

您将在同一个表中拥有所有注释。新的和旧的注释可以通过日期时间轻松地识别,并且注释之间的关系可以通过父关系字段

来识别。

这个结构是嵌套模型结构的一个很好的替代方案;您将减少读取工作(单个表-单个查询),并且您的写事务将是原子的。

解决方案的适当性可能取决于开发框架。

如果这是Ruby on Rails,我会说你有一个多态关系,其中评论表将有列"commentable_type"answers"commentable_id"。commentable_type将包含关联表(或模型,在Rails术语中)的名称,如"Movie","Article","Comment"等,并且commentable_id将包含其主键。

这通常意味着您不能使用数据库外键约束,而必须依赖于应用程序强制的完整性。

可以创建一个引用Comment表的Reply表