Database 数据库中的泛化

Database 数据库中的泛化,database,database-design,Database,Database Design,我需要为一个系统设计一个数据库,其中有客户和供应商,但它们都与称为用户的实体相关,其中每个用户要么是客户,要么是供应商。 问题在于,供应商与客户没有关联的其他实体相关。 那么我如何设计这样的数据库呢?其他实体将把供应商的ID存储为外键。供应商和客户无论如何都不会在同一个表中*,所以这两个表不会同时使用ID 此外,要添加,如果您选择的数据库允许,您为用户所需的外键可以作为添加/编辑触发器进行管理。这样,您可以确保用于这些相关实体的供应商id不是链接到客户的用户id。。。其中userid不在中,请从

我需要为一个系统设计一个数据库,其中有客户和供应商,但它们都与称为用户的实体相关,其中每个用户要么是客户,要么是供应商。 问题在于,供应商与客户没有关联的其他实体相关。
那么我如何设计这样的数据库呢?

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

此外,要添加,如果您选择的数据库允许,您为用户所需的外键可以作为添加/编辑触发器进行管理。这样,您可以确保用于这些相关实体的供应商id不是链接到客户的用户id。。。其中userid不在中,请从customer=TRUE的用户中选择userid


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

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

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

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

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

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

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

有关一般答案,请参见以下内容:


不幸的是,这个问题不适合这样做。请阅读这篇文章,它被称为Party Model。他们可以共享一组公共信息,例如网站的登录信息。但问题是,有时我需要将供应商和客户链接到同一个表。。假设我想将供应商加入一个名为Accounts的表,我想将客户加入同一个Accounts表,但是,每个帐户记录都应该链接到一个用户,即客户或供应商!我如何解决这个问题?我假设当您加入Accounts表时,供应商和客户没有链接在同一条记录中-因此Accounts中的entityID字段可以是客户或供应商-在这种情况下,使用userID,您就有了Customer=TRUE/FALSE的字段。或者b如果供应商和客户链接在同一个记录中,那么明显的vendorID和customerID字段,但我不认为这是您要问的,所以使用选项a。@Marvo:是的,这就是我示例中的users表。仅供参考,在您的结构中,如果没有两个表vendor和customer的触发器,就无法确保user.userID不会在两个表中重复。根据类似于Accounts表的要求(其中任何一个都可以链接),users.userID字段将在Accounts中使用。如果其他表只处理其中一个字段,那么它们可能会独占一个vendorID或customerID字段。