使用其他唯一约束创建Surrogate Key表

时间:2016-08-22 21:56:56

标签: mysql sql database

我自学数据库设计和MYSQL。感谢您查看我的问题。我目前在mySQL

中有一个类似于此的数据库

enter image description here

我使用复合键的原因是我希望始终保持OwnerDevName唯一。 我可以看到的一个问题是我需要一直使用两个外键,因此Data1表没有规范化。

所以我创建了一个看起来像这样的表,使另一个表具有代理键表。

enter image description here

这看起来不错吗?我不确定制作新桌子是不是一个好主意...

有没有可以在一个有代理键的表中制作它们,保持OwnerDevName的组合是这样的唯一吗?:

enter image description here

1 个答案:

答案 0 :(得分:3)

Device3Data3对我来说很好看。除非有一些令人信服的理由,否则我不会添加额外的表格。创建第三个表可能有任何令人信服的理由归结为只处理复合外键,就像在原始的Device / Data1模型中一样。

似乎缺少的是UNIQUE约束。您可以在ownerdevname列的组合上添加UNIQUE约束(即UNIQUE INDEX)。 e.g。

 CREATE TABLE device3 
 ( id       INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
 , owner    VARCHAR(30) NOT NULL COMMENT ''
 , devname  VARCHAR(30) NOT NULL COMMENT ''
 , ...

 , UNIQUE KEY device3_UX1 (owner, devname)

 ) ...

或者,如果您已经创建了device3表,则只需添加一个唯一索引到现有表。 e.g。

 CREATE UNIQUE INDEX device3_UX1 ON device3 (owner, devname)