如何设计具有更高嵌套级别的表
本文关键字:嵌套 高嵌套 | 更新日期: 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表