【问题标题】:Multiple nullable foreign keys in one table一张表中有多个可为空的外键
【发布时间】:2016-07-08 13:42:39
【问题描述】:

我正在为促销设计一张桌子。我可以推广三种类型的实体:文章、照片和论坛帖子。

最初我想创建一个包含三个外键的表,其中只设置一个。

promotion: 
- id
- id_article
- id_photo
- id_thread
- promotion_type
- ... other properties

 article:
 - id
 - .. other properties

 photo:
 - id
 - .. other properties

 thread:
 - id
 - .. other properties

这不是一个好方法吗?在最初的想法之后,看起来确实可以在这里做一些“更漂亮”的事情。 promotion_type 表示应该连接哪些外键表。

【问题讨论】:

  • promotion_type 似乎是多余的。
  • 按照设计,它可以节省一些加入时间,因为我们不必加入所有表,只需加入那些需要的表。
  • 那也可以判断哪个id_的值正确?
  • 看起来不错,即使我在查询中请求,sql server 也不会尝试加入空值。

标签: sql sql-server database-design foreign-keys


【解决方案1】:

不再有 3 列(id_article、id_photo、id_thread),只需添加一列。例如,将其称为 PromotionID,然后您仍然可以使用 PromotionType 列来确定要绑定哪个表。

Promotion 表如下:-promotion: - ID - PromotionID(id_article、id_photo 或 id_thread) - 促销类型 - ...其他属性

【讨论】:

  • 我不想削弱数据完整性。使用FK,sql server会检查这个id是否真的存在于其他表中。
猜你喜欢
  • 2020-10-02
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多