#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. Я могу добавить уникальный ключ с нулевыми столбцами! Я этого не знал. Спасибо