首先:如果一个表包含一个名为 ID 的列,我希望这是标识一条记录的唯一 ID。 ID 通常用作表的主键。
您也可以使用自然键。由于您的表称为factura并且有一列num_factura,我认为这是发布的唯一factura编号。
如果是这样,那么 UNIQUE (num_factura,ID) 将无济于事,因为您希望单个属性是唯一的,而不是它们的一对。有了这样给定的 UNIQUE 约束,您仍然可以有重复的 ID 和重复的 num_factura。改用这个:
CREATE TABLE factura
(
num_factura varchar(10) not null,
ID varchar(10) not null,
UNIQUE KEY (num_factura),
UNIQUE KEY (ID)
);
(您也可以将UNIQUE KEY 关键字中的一个替换为PRIMARY KEY。哪个都没有关系。您通常会使用您在其他表中引用的那个。)
现在您可以基于 ID 或基于自然键来构建数据库。
以下是 ID 概念的示例:
create table factura
(
id int not null auto_increment,
num_factura varchar(10) not null,
...
primary key (id),
unique key (num_factura)
);
create table detalle_factura
(
id int not null auto_increment,
id_faktura int,
...
primary key (id),
foreign key(id_faktura) references factura(id)
);
这里是自然键概念的一个例子:
create table factura
(
num_factura varchar(10) not null,
id int not null auto_increment, -- In case you want an additional id for the table (for logging maybe). It is not needed.
...
primary key (num_factura),
unique key (id) -- In case the table shall have this column.
);
create table detalle_factura
(
faktura_num varchar(10),
faktura_sub_num varchar(10),
id int not null auto_increment, -- Again: Only if you want this additional ID for some purpose.
...
primary key (faktura_num, faktura_sub_num),
foreign key(faktura_num) references factura(faktura_num),
unique key (id) -- ditto
);
由您决定使用哪个概念。 ID 概念的优势在于其技术方法——您可以相当轻松地更改数据库结构。自然密钥概念在数据完整性和轻松数据访问方面非常重要。