创建具有其他唯一约束的代理键表

Bum*_*Kim 4 mysql sql database

我自学数据库设计和MYSQL。谢谢您看我的问题。我目前有一个数据库,看起来像这样mySQL

在此处输入图片说明

我使用的复合键的原因是我要保持OwnerDevName独特的所有时间。我可以看到的一个问题是,我一直需要使用两个外键,因此Data1表没有被标准化。

因此,我使一个表看起来像这样,使另一个表具有代理键表。

在此处输入图片说明

这样看起来还好吗?我不确定制作新桌子真的是个好主意。

是否可以在具有代理键的单个表中使它们保持像这样的组合OwnerDevName唯一性?

在此处输入图片说明

spe*_*593 6

Device3Data3对我来说很好。除非有一些令人信服的理由,否则我不会添加额外的表。而且,创建第三个表的任何令人信服的理由都可以归结为仅处理复合外键,例如在原始Device / Data1模型中。

似乎唯一缺少的就是唯一约束。您可以在ownerdevname列的组合上添加UNIQUE约束(即UNIQUE INDEX)。例如

 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)

 ) ...
Run Code Online (Sandbox Code Playgroud)

或者,如果您已经device3创建了表,则只需在现有表中添加添加唯一索引即可。例如

 CREATE UNIQUE INDEX device3_UX1 ON device3 (owner, devname) 
Run Code Online (Sandbox Code Playgroud)