Bum*_*Kim 4 mysql sql database
我自学数据库设计和MYSQL。谢谢您看我的问题。我目前有一个数据库,看起来像这样mySQL:
我使用的复合键的原因是我要保持Owner和DevName独特的所有时间。我可以看到的一个问题是,我一直需要使用两个外键,因此Data1表没有被标准化。
因此,我使一个表看起来像这样,使另一个表具有代理键表。
这样看起来还好吗?我不确定制作新桌子真的是个好主意。
是否可以在具有代理键的单个表中使它们保持像这样的组合Owner和DevName唯一性?
在Device3和Data3对我来说很好。除非有一些令人信服的理由,否则我不会添加额外的表。而且,创建第三个表的任何令人信服的理由都可以归结为仅处理复合外键,例如在原始Device / Data1模型中。
似乎唯一缺少的就是唯一约束。您可以在owner和devname列的组合上添加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)