2016-04-09 6 views
-1

отгрузки таблицы структура shippings table structure Я хочу подключить в другую таблицу, как это (я получил «1215 ошибки»):Почему я не могу подключить свои таблицы в MySQL?

CREATE TABLE goods_and_shippings (
good_id INT NOT NULL, 
s_date DATE NOT NULL, 
shipping_id INT NOT NULL, 
PRIMARY KEY (good_id), 
FOREIGN KEY (s_date) REFERENCES shippings(s_date) 

)

Подключенных колонок имеют одинаковые типы данных, как вы можете видеть (как DATE, так и NOT NULL), а во всех таблицах используется движок InnoDB. Но у меня есть этот фрагмент кода, и она работает:

CREATE TABLE goods_and_shippings (
good_id INT NOT NULL, 
s_date DATE NOT NULL, 
shipping_id INT NOT NULL, 
PRIMARY KEY (good_id), 
FOREIGN KEY (shipping_id) REFERENCES shippings(shipping_id) 

)

Все таблицы пусты сейчас. Вот запрос для создания отправок:

CREATE TABLE shippings (
shipping_id INT NOT NULL, 
s_date DATE NOT NULL, 
driver_id INT NOT NULL, 
start_place VARCHAR(50) NOT NULL, 
end_place VARCHAR(50) NOT NULL, 
car_id INT NOT NULL, 
price DECIMAL(5,2) NOT NULL, 
PRIMARY KEY (shipping_id, s_date) 

)

Здесь Кастраты я использовал после:

ALTER TABLE shippings ADD CONSTRAINT fk_car_id FOREIGN KEY (car_id) REFERENCES cars(car_id); 
ALTER TABLE shippings ADD CONSTRAINT fk_driver_id FOREIGN KEY (driver_id) REFERENCES drivers(driver_id); 

Что плохого в моих запросах? Как исправить это и подключить goods_and_shippings.s_date и shippings.s_date?

ответ

0

В целом, ссылки на внешние ключи являются уникальными или первичными ключами. Однако это условие расслабился INNODB, как объяснено в documentation:

InnoDB позволяет внешний ключ для ссылки на какой-либо индекс столбца или группы столбцов . Однако в ссылочной таблице должен быть индекс , где ссылочные столбцы перечислены в качестве первых столбцов в того же порядка.

Таким образом, вы можете иметь внешнюю ссылку на shipping_id, поскольку это первый ключ первичного ключа, но не до даты. Однако я бы посоветовал вам настроить отношения с внешним ключом для завершения первичных ключей. И, как правило, у меня обычно есть автоматически увеличивающий первичный ключ во всех таблицах, чтобы облегчить такие отношения.

+0

Вы можете сказать, что именно мне нужно сделать? – user3528865

+0

Должен ли я перестраивать структуру таблицы? – user3528865

+0

Я понял. Решение: FOREIGN KEY (shipping_id, s_date) ССЫЛКИ Отгрузка (shipping_id, s_date) – user3528865