|
|
1
24
不,您不能将单个字段作为两个不同表的外键。你怎么知道在哪里找钥匙? 您至少需要一个字段来告诉它是什么类型的用户,或者两个单独的外键。 您还可以将所有用户通用的信息放在一个表中,并为特定于用户类型的信息设置单独的表,这样您就有一个以用户id为主键的表。 |
|
2
4
所以订单甚至没有 |
|
|
3
1
我继承了一个SQL Server数据库,在那里完成了这项工作(在四个外键关系和四个不相关的表中使用了一列),所以是的,这是可能的。不过,我的前任已经走了,所以我不能问他为什么认为这是一个好主意。 他使用GUID列(“uniqueidentifier”类型)来避免歧义问题,并关闭了对外键的约束检查,因为可以保证只有一个匹配。但我能想到很多你不应该的理由,我还没有想到任何你应该的理由。 你的听起来确实像是经典的“专业化”问题,通常通过创建一个包含共享客户数据的父表,然后创建两个子表来解决,这两个子表包含每类客户独有的数据。然后,您的外键将与父客户表相对,您对哪种客户类型的确定将基于哪个子表有匹配的条目。 |
|
|
4
1
您可以创建引用多个表的外键。此功能允许表的垂直分割,同时保持引用完整性。然而,就你的情况而言,这并不适用。
拉吉 |
|
|
5
0
我知道这是一个非常古老的问题;然而,如果其他人通过谷歌搜索发现了这个问题,而你不介意在表格中添加一些列,我使用的一种技术(将原始问题作为假设问题来解决)是:
|
|
|
6
0
如前所述,如果键是12345,您如何知道在哪个表中查找它?我想,你可以做点什么来确保两个表的键值永远不会重叠,但这太丑陋和痛苦了。您可以有第二个字段,说明它是哪种客户类型。但是,如果您要有两个字段,为什么不为客户类型1 id设置一个字段,为客户类型2 id设置另一个字段。 在不了解更多关于你的应用程序的情况下,我的第一个想法是,你真的应该有一个通用的客户表,其中包含两者共有的数据,然后有两个额外的表,其中分别包含每种客户类型的数据。我认为这两者必须有很多共同的数据——至少是姓名、地址和客户号等基本数据——而且跨表重复列会浪费很多时间。然后,附加表可以引用回基表。由于基表只有一个键,因此外键必须知道引用哪个表的问题就不复存在了。 |
|
|
Nico Pizzo · 子查询上的nhibernate联接 8 年前 |
|
|
YMC · 无法在Nhb 4中构建只有特定字段可供选择的2个表联接 8 年前 |
|
|
Stu · 具有特定类型的字符串外键的NHibernate映射 8 年前 |
|
|
Zout · 为Hibernate的HiLo算法管理的列生成ID 8 年前 |