我应该在FK关系或父表中使用复合键吗



这个问题很简单,但不确定有更好或更技术的方法来命名它。

三张表:

  1. tbl_House(HouseID PK)
  2. tbl_HouseLike(HouseID PK、UserID PK)<--复合键
  3. tbl_HouseLikeNotify(家庭ID PK,用户ID PK)<--复合键

为了解释以上内容,有人在房屋配置文件上单击like,该文件将插入tbl_HouseLike和tbl_HousLikeNotify表中。

一个进程每隔一段时间就会检查第三个表,并向房主发送通知,完成后,它只会从第三个(通知)表中删除记录。它基本上只是一个临时空间,而不是用来存储长期的关键数据。

如果从tbl_house中删除了一个房子,我将在tbl_HouseLike上使用delete cascade上的来删除相关记录。

问题是,处理第三张桌子的最佳方式是什么?

选项1

为tbl_HouseLikeNotify.HouseID引用tbl_House.HouseID添加FK如果我这样做了,如果从tbl_HouseLike中删除了一条记录,我就必须从存储过程中的tbl_House LikeNotify表中删除。

选项2

为(tbl_HouseLikeNotify.HouseID,tbl_House LikeNotify.UserID)引用(tbl_House Like.HouseID,tbl_ HouseLik.UserID)添加FK

那么,引用复合键和引用父表有什么利弊吗?无论争论如何,我都喜欢级联,通过这样做,如果有人在发出通知之前"取消"了房子的链接,它就会级联并从tbl_HouseLikeNotify和tbl_HousLikeNotfy中删除。否则,我将不得不在存储过程中删除它。

除非在任何时候只允许一个用户向房主创建通知,否则您必须选择选项2,因为在通知检查的同一时间间隔内,可能会有多个人对同一栋房子感兴趣。

选项2依赖于级联删除规则,将提供更少的代码来编写、测试和维护。但是,如果您只希望所有者在任何时间间隔内只收到一个通知,那么您将需要做一些工作来强制执行此限制。您还需要记录这一事实,因为选项2的设计允许在同一栋房子上有多个挂起的通知。

最新更新