Mysql:具有空值的多列主键

时间:2014-06-25 08:59:13

标签: mysql sql nullable composite-primary-key

我有这些表格:

CREATE TABLE items(
   id int,
   ...
)

CREATE TABLE types(
   id char(1),
   ...
)


CREATE TABLE prices(
   item int,
   type char(1) NULL, --can not be null because it is in PK!
   price decimal,
   PRIMARY KEY (item, version),
   FOREIGN KEY (item) REFERENCES items(id),
   FOREIGN KEY (type) REFERENCES types(id)
)

并非所有商品的类型价格都不同:

INSERT INTO prices (item, type, price)
VALUES (1,'A',10.0),
VALUES (1,'B',20.0),
VALUES (1,'C',20.0),
VALUES (2,NULL,50.0),
VALUES (3,'A',10.0),
VALUES (3,'B',20.0),
VALUES (4,NULL,70.0);

你可以看到一些物品(2,4)只有一个价格。 这样我可以在价格和类型之间设置外键,但我不能在价格的主键中添加类型,因为它可以为空...如何解决这个问题?我需要外键和主键来输入字段,但这可以是可选的。

1 个答案:

答案 0 :(得分:0)

你可以根据一个标识符在价格表上创建一个“代理”主键,这样你就不必担心维护pk列了。然后,您可以在项目中创建唯一索引并键入列。

作为你的pk的id列然后才存在,所以mqsql可以保持文件系统上的行组织。