【问题标题】:How to represent "ALL" in Primary Key -foreign Key relationship如何在主键-外键关系中表示“ALL”
【发布时间】:2010-06-01 05:27:52
【问题描述】:

我必须创建一个数据库设计来存储列入黑名单的传真号码。我创建了一个表,该表的一列是 customerID,它是表 Customer 的外键。现在我想要一个被所有客户列入黑名单的传真号码。我应该如何处理这个。在这种情况下我应该使用 Null 吗?请提供选项

【问题讨论】:

  • 无论您做什么,请记住,下周您将收到例外请求,因为某个特定客户确实需要访问该黑名单号码,因此请尽量轻松地将例外添加到黑名单中.
  • ho1,很好。另外,当一个传真号码被所有客户列入黑名单,然后又添加了一个新客户时,这意味着什么?这是否意味着该传真号码也被该客户列入黑名单?

标签: database-design


【解决方案1】:

如果将其列入所有客户的黑名单,则为没有关系的客户提供单独的表格。

有些号码被所有人列入黑名单,有些号码被某些客户列入黑名单。这个数字不能在两者中都有定义。因此,对于某些数字(我假设是多:多关系)被列入黑名单的数字,您可以使用经典的多多关联表设计。对于所有被列入黑名单的号码,与客户没有任何关系,这意味着没有加入条件由于每个中的数据是互斥的,因此每种类型的数据出现在不同的表中。

我似乎无法获得关于我如何看待基本设计的图像来显示,所以我将在此处粘贴链接:http://www.freeimagehosting.net/image.php?9046f1985c.png

【讨论】:

  • 你的意思是说为所有客户创建2个表,其中一个具有customerID和faxnumber的关系以及其他表。这会不会是性能开销。请建议
  • 你能解释一下你的答案吗?为什么你认为这比只带回匹配特定 CustomerId 或 CustomerId 为 NULL 的那些更好?
  • 同意 Preet 的建议。如果它是一个没有关联客户的号码,那么它应该在没有客户 ID 的表中。你为什么要使用 null 呢?
  • @大卫。按照这个逻辑,为什么对任何事情都使用 NULL 呢?从语义上讲,它仍然是一个列入黑名单的传真号码。郑重声明,我对最佳设计持矛盾态度,并且认为问题中关于领域要求的信息不足以提出明确的建议。
  • 鉴于空值的复杂性和缺点,我认为您应该有充分的理由将它们添加到任何数据库设计中。在这种情况下,我看不出原因。使用空值经常给出的一个原因是它们可以替代“未知”值——但这并不适用于此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多