数据库设计问题:歧视列与外键

Bod*_*den 1 database-design

因此,假设我有一个用于管理客户的数据库.客户拥有人们可能期望的所有基本属性 - 但是,有一些特殊类型的客户称为分销商.分销商本身没有任何特殊属性,除了它可以将产品分销到存储在市场表中的某些市场.

我可以想到两种方法来区分分销商和"常规"客户:

  1. 在客户表中创建一个名为"customer_type"的歧视列.此列将包含一个区分"常规"和"分销"客户的值.

    • 这种方法的好处在于它非常简单,如果需要,可以轻松添加新的客户类型.

    • 这种方法的缺点是,在这种情况下,连接市场和"分销商"的市场表实际上只是将市场与"客户"联系起来.没有办法强制将市场链接到分销商类型的客户.

  2. 保留customers表,并创建一个分发表,它基本上只有一个id列和一个到customer表的外键列.

    • 这种方法的好处是我的市场表现在可以链接到只包含分销商的分销商表.没有机会链接到非经销商的客户(如果客户"类型"从经销商更改为常规经销商可能会发生).

    • 这种方法的缺点是它更加复杂,添加新的客户类型非常困难.

我还有什么可能遗漏的,你对此事有何看法?

Arn*_*hea 5

我会为拥有自己的密钥/ ID的经销商提供一个单独的表格.如果所有经销商都是客户,则可以将外键输入客户表.

最后,您可能希望向分销商添加属性.然后我会有一个单独的表格将市场与经销商联系起来(这可能会随着时间而变化).

通常只有少数几个属性的实体(例如分销商)最终会拥有更多.