我有两个表,我想创建一个外键。
主表
PK - Key1 - varchar(20) PK - Key2 - date
二级表
PK - AutoID FK - Key1 - varchar(20) FK - Key2 - date
当我尝试创建主表和辅助表之间的关系时,我不断收到消息
The columns in the Primary Table do not match a primary key or unique
constraint.
在次表中可以有许多记录与同一个Key1和Key2,所以我们使主键成为一个自动创建的数字。
关于如何设置这两个表之间的外键关系的任何想法?
解决方法
其中一些是关注的,其中一些是其他人有这样的问题的上下文(像任何人实际上首先搜索?)
在创建密钥时遇到问题的第一件事是确保两个表中的数据类型不匹配。如果你有一个bigint在一个和一个int在另一个,它会吹。所有键上都是如此,但如果您使用多个字段,则更有可能出现。简单的数学表明机会增加的原因。
下一个问题是数据。如果由于数据而无法创建密钥,则必须找出子表中存在的父表中不存在的内容。 LEFT加入表(在连接的第二个/左侧是辅助的),只包括主表为空的行。您将必须在父表中创建这些记录,或者删除它们。
这样做的一个方法是在父表上设置一个新的主键。然后,您可以在此新主键上创建一个外键,并将其与子表中的记录进行匹配。然后,您可以设置连接,您可以进行二次操作的清洁。
哪个更好?新的主键或使用复合键?这真的取决于数据的性质,但我更喜欢在自然键或复合键上使用派生键。但是,有时候,获得单个字段派生密钥所需的工作是很多工作。