数据库设计 - 如何为2个表中的1个设置FK关系?

Rac*_*hel 0 database database-design entity-relationship multiple-tables unique-key

跨多个数据库表维护唯一ID字段的最佳方法是什么?

我的数据库包含企业和人员,并且两个实体都需要具有与之关联的唯一ID字段.此外,还有其他表(例如地址)可以使用其ID作为外键来引用业务或个人.

我想到的一些想法是:

  • 使用插入行时计算的非自动编号ID字段.这将解决我的独特问题,但随后我想通过相关属性(例如通过地址)查找内容时,我必须检查两个表中哪一个包含我正在寻找的记录.

  • 在AutoNumber ID中添加一个Prefix,以确定要查找ID的表,但是,关联表中的ID字段可能要么成为字符串,要么包含与它们关联的表的标志,我不知道如何影响表现.

  • 将人员和企业合并到一个表中.我的问题是人和企业有不同的属性,需要单独的字段,这种情况违背了我的本性,因为我更喜欢为单独的实体分别使用表.

  • 创建一个包含唯一ID字段的主表,Person或Business的ID字段,以及一个标记,说明它是哪一个.然后使用该ID作为我的外部引用#和所有关联表.

  • 一些更好的处理方式,我不知道,因为我不是一个dba

无论我采用什么解决方案都需要能够轻松处理大量记录(这将取代的数据库有几百万条记录)并且在MS Sql Server上

HLG*_*GEM 6

那么你不能用该设置设置外键.单个外键不能引用两个可能的不同表.

我会做以下其中一项:

当然,您可以在地址表中使用两个单独的列,每个列都包含两个实体.BusinessId和peopleid.FK可以有空值,所以这没关系.然后,您可以强制执行FK关系,这将使您免于数据完整性问题.

或者设置包含业务和人员的父表,但只有很少的字段(只有他们真正有共同点 - 甚至可能只有uniqueid和记录类型),那么你可以拥有业务,人员,地址等的子表.

或者设置单独的子表 - 业务和业务地址,人员和人员地址等.然后,您不需要在两个逻辑实体之间保持唯一ID.

我忘记了一种可能性,如果你有很多关系,你可以拥有地址,业务,人员,然后是一些链接表,BusinessAddress,PeopleAddress.如果我有另一个选择,我个人不会使用GUID,因为它们可能会损害性能.