2015-10-07 3 views
0

У меня 4 таблицы здесь:композитный внешний ключ добавления не

CREATE TABLE paper (
id VARCHAR(20) PRIMARY KEY, 
name VARCHAR(30) 
) ENGINE =INNODB; 

CREATE TABLE subscriber (
id VARCHAR(10) PRIMARY KEY, 
name VARCHAR(20), 
address VARCHAR(30), 
suburb VARCHAR(20), 
state VARCHAR(3), 
postcode VARCHAR(4)) 
round_id INTEGER NOT NULL, 
FOREIGN KEY (round_id) REFERENCES round (id) 
    ON UPDATE CASCADE ON DELETE RESTRICT 
) ENGINE = INNODB; 

CREATE TABLE current_order (
paper_id VARCHAR(20), 
subscriber_id VARCHAR(10), 
PRIMARY KEY (paper_id, subscriber_id), 
FOREIGN KEY (paper_id) REFERENCES paper (id) 
    ON UPDATE CASCADE ON DELETE RESTRICT, 
FOREIGN KEY(subscriber_id) REFERENCES subscriber (id) 
    ON UPDATE CASCADE ON DELETE RESTRICT) 
ENGINE = INNODB; 

CREATE TABLE receipt (
id INTEGER PRIMARY KEY AUTO_INCREMENT, 
receipt_date DATE, 
paid_till_date DATE, 
paper_id VARCHAR(20), 
subscriber_id VARCHAR(10)) 
ENGINE = INNODB; 

Теперь таблица бумага имеет первичный идентификатор ключа, он ссылается paper_id в таблице current_order. Абонент таблицы имеет идентификатор первичного ключа, на него ссылается абонент_id в таблице current_order. Tabe current_order имеет составной первичный ключ (paper_id, subscriber_id). Таким образом, эти три таблицы были связаны друг с другом через отношения внешних ключей.

Если я хочу получить последнюю таблицу, связанную с этими тремя таблицами, как мне это сделать? Моя идея состояла в 1: установить сложный внешний ключ (paper_id, subscriber_id), ссылающийся на составной первичный ключ (paper_id, subscriber_id) в таблице current_order. 2: установить два одиночных внешних ключа (paper_id) и (subscriber_id), ссылающихся на (paper_id) и) subscriber_id) в таблице current_order отдельно.

Ни один из методов не работал, и в нем возникла ошибка 1452: невозможно добавить или обновить дочернюю строку. Итак, я действительно отчаянно хочу узнать, как правильно установить связь между приемом таблицы и таблицей current_order? здесь Е-R биграмма:

E-R DIGRAM

Существует две связи между получением таблицы и таблицы current_order и я обязан установить отношения в соответствии с этим.

+0

Вы можете иметь несколько отдельных полей 'foreign_key' в таблице. Просто добавьте отношения 'foreign_key' в' paper_id' и 'subscriber_id' в таблицу' receipt'? Кроме того, imo, если только у '' receipt' 'есть' paper_id' и 'subscriber_id', я спрашиваю, должны ли они быть в таблице« получения »вообще? –

+0

да, у каждой квитанции есть документ-идентификатор, а у абонента_ид – Frostless

ответ

0

я не эксперт MySQL, но я хотел бы попробовать это:

CREATE TABLE receipt (
id INTEGER PRIMARY KEY AUTO_INCREMENT, 
receipt_date DATE, 
paid_till_date DATE, 
paper_id VARCHAR(20), 
subscriber_id VARCHAR(10), 
FOREIGN KEY (paper_id,subscriber_id) REFERENCES current_order (paper_id,subscriber_id) 
    ON UPDATE CASCADE ON DELETE RESTRICT) 
ENGINE = INNODB; 

это работает?

+0

да, сам код прав, однако он не работал раньше, потому что некоторые значения этих двух столбцов в таблице были получены и отличались от значений в таблице current_order. СПАСИБО – Frostless

+0

добро пожаловать. пожалуйста, пометьте мой пост как ответ или повысьте его, если поможет решить вашу проблему. – Paolo

Смежные вопросы