我自学数据库设计和MYSQL。感谢您查看我的问题。我目前在mySQL
:
我使用复合键的原因是我希望始终保持Owner
和DevName
唯一。
我可以看到的一个问题是我需要一直使用两个外键,因此Data1
表没有规范化。
所以我创建了一个看起来像这样的表,使另一个表具有代理键表。
这看起来不错吗?我不确定制作新桌子是不是一个好主意...
有没有可以在一个有代理键的表中制作它们,保持Owner
和DevName
的组合是这样的唯一吗?:
答案 0 :(得分:3)
Device3
和Data3
对我来说很好看。除非有一些令人信服的理由,否则我不会添加额外的表格。创建第三个表可能有任何令人信服的理由归结为只处理复合外键,就像在原始的Device / Data1模型中一样。
似乎缺少的是UNIQUE约束。您可以在owner
和devname
列的组合上添加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)