MYSQL:两个字段作为PRIMARY KEYs + 1 Field as UNIQUE,一个问题

时间:2011-06-27 14:17:30

标签: mysql database-design indexing unique auto-increment

我有两个主要(复合)键,指的是商店和分店。 我以为我应该为每一行使用相应的ID,所以我添加了一个名为ID的UNIQUE + AUTO_INCREMENT。

所以我在表上有一个名为ID(AUTO INCREMENT)的列,但是它被声明为PRIMARY - 这是自动完成的,我不希望ID为PRIMARY。只是商店和分店。

我已经学会了如何欺骗MYSQL接受ID字段为UNIQUE和AUTO INCREMENT,因为制作AUTO_INCREMENT(它想要使它成为PRIMARY)并不是非常简单。 我不得不删除ID字段(出于某种原因,它不允许我擦除它的PRIMARY索引),然后将其声明为INDEX,然后才将AUTO INCREMENT。

这是一个好方法吗? 使用这种设计会有什么问题吗?

谢谢!!!

2 个答案:

答案 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)
);