数据库中的泛化

时间:2013-04-26 21:13:55

标签: database database-design

我需要为客户供应商的系统设计数据库,但它们都与名为用户的实体相关联,其中每个用户是客户还是供应商。 问题是供应商客户不包含的其他实体相关。 那么如何设计这样的数据库?

3 个答案:

答案 0 :(得分:0)

其他实体将Vendor的ID存储为外键。并且供应商和客户无论如何都不会在同一个表中 * ,所以这两个人的ID可能不会同时使用。

此外,要添加,如果您选择的数据库允许,可以将用户所需的外键作为添加/编辑触发器进行管理。这样,您可以确保用于这些相关实体的供应商ID不是链接到客户的用户ID。 (...WHERE userid NOT IN (SELECT userid FROM users WHERE customer = TRUE)

* 客户和供应商拥有不同的属性/字段,因此不应位于同一个表中。

答案 1 :(得分:0)

您可以让供应商和客户与用户表建立关系。

user
===========
userId
name

vendor
===========
vendorId
companyName
userId

customer
===========
customerId
source
userId

然后,您可以从同一个表链接到客户和供应商,但他们仍然可以在用户表中共享相同的公共数据。事实上,客户也可以是供应商。

答案 2 :(得分:0)

您的问题可以概括如下:如何在关系表中表示子类?

对于通用答案,请参阅:

https://stackoverflow.com/tags/class-table-inheritance/info