我有两个主要(复合)键,指的是商店和分店。 我以为我应该为每一行使用相应的ID,所以我添加了一个名为ID的UNIQUE + AUTO_INCREMENT。
所以我在表上有一个名为ID(AUTO INCREMENT)的列,但是它被声明为PRIMARY - 这是自动完成的,我不希望ID为PRIMARY。只是商店和分店。
我已经学会了如何欺骗MYSQL接受ID字段为UNIQUE和AUTO INCREMENT,因为制作AUTO_INCREMENT(它想要使它成为PRIMARY)并不是非常简单。 我不得不删除ID字段(出于某种原因,它不允许我擦除它的PRIMARY索引),然后将其声明为INDEX,然后才将AUTO INCREMENT。
这是一个好方法吗? 使用这种设计会有什么问题吗?
谢谢!!!
答案 0 :(得分:2)
普遍的看法是每个表都应该有一个名为Id的唯一自动编号列。
在由Codd和Date开发的经典数据建模中,ID字段对于完整的数据逻辑模型不是必需的。
ID字段有什么用处?您是否曾通过其ID引用此表中的行?如果从来没有,那就离开这个领域吧。 (商店,分店)提供了一个非常好的候选人作为PK。
答案 1 :(得分:0)
您的create table
声明是什么样的?因为我想象这个:
CREATE TABLE foo (
IDCol int not null auto_increment,
shop int not null,
branch int not null,
/* ... */
UNIQUE KEY IDCol (IDCol),
PRIMARY KEY (shop, branch)
);