Mysql: первичный ключ с несколькими столбцами с нулевыми значениями

#mysql #sql #nullable #composite-primary-key

#mysql #sql #обнуляемый #составной первичный ключ

Вопрос:

У меня есть эти таблицы:

 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:

вы могли бы создать «суррогатный» первичный ключ в таблице цен на основе идентификатора, так что вам не нужно беспокоиться о поддержании столбца pk. Затем вы можете создать уникальный индекс для столбцов «Элемент» и «Тип».

столбец id, который является вашим pk, тогда просто существует, чтобы mqsql мог упорядочивать строки в файловой системе.

Комментарии:

1. Я могу добавить уникальный ключ с нулевыми столбцами! Я этого не знал. Спасибо