1
6
好吧,你不能用那个设置设置设置外键。一个外键不能引用两个可能不同的表。 我将执行以下操作之一: 当然,您可以在地址表中使用两个单独的列来表示两个实体中的每一个。BusinessID和PeopleID。fks可以有空值,所以这是可以的。然后,您可以实施FK关系,这将防止您出现数据完整性问题。 或者设置一个父表,其中包含企业和人员,但字段很少(只有他们真正具有的共同点,甚至可能只有唯一的ID和记录类型),然后您可以为企业、人员、地址等创建子表。 或者设置单独的子表——业务地址、业务地址、人员和人员地址等,这样就不需要在两个逻辑实体之间保持ID的唯一性。 我忘记了一个可能性,如果你有很多对很多的关系,你可以有地址,业务,人员,然后一些链接表,业务地址,人员服装。 如果我有其他选择的话,我个人不会使用guid,因为它们会损害性能。 |
2
2
你也可以改变你的想法。 不是让地址具有个人或企业ID,而是让个人或企业具有地址ID。 在我的书中,这是一种更自然的思考方式…一个人有一个地址。 |
3
1
这就是guid的作用。 |
4
1
有几种不同的模式可以做到这一点,但最简单和最灵活的模式是使用唯一标识符(guid);大多数dbs都有一些构建这些标识符的工具(例如,SQL Server是newid())。他们比其他身份证要大,但他们会帮你完成你要找的工作。 |
5
1
有些数据库允许您使用具有空值的外键。有些没有,我想不起来SQL Server是否有。如果您的允许,地址表中可以有两个ID列,一个指向人员,一个指向企业。这种方法也有优点和缺点;缺点之一是DBA可能不喜欢它,但是如果数据库允许,那么它可能是一种替代方法。 |
6
1
创建一个“父类型”表,该表标识企业和人员,并用您的外键引用该表。这是这种情况的一种常见模式。见: Party Data Model . |
7
0
guid是唯一的标识符,其他的都不行。
如果你想把生意和人分开,你可以有两张桌子 人物地址 和 营业地址 保持关系和 当你查找两个地址的时候,你必须做一个联合。 或者你可以 单个表的EntityAddress 对于两个企业,一个人在一起 具有实体自然场 告诉你是生意还是人。 |
8
0
生意人和人真的,完全,独立于生意? 他们没有什么共同点,即使不是“他们出生的那天”? 企业不把这两者都视为“交易对手”? 我想说明的是,如果你不戴一般IT(所谓的“专业人士”)通常会看穿的那种通常会让人眼花缭乱的眼镜,那么你很快就会发现你在寻找的共性。 在数据库中定义一个表来记录这些共性(即使它只是标识),并使地址引用该表。 |
Iason · 从多个表中删除MySQL记录的效果不如预期 8 年前 |
James · MySQL多个左联接,可能有空记录 10 年前 |
user3924829 · 如何检查特定日期时间是否未使用多个表? 10 年前 |
melatonin15 · 连接两个不同数据表的相同行(此列除外)的列值 10 年前 |
manix · 使用mysql在一个查询中选择多个表中的子项总数 12 年前 |