2014-10-21 5 views
1

Я пытаюсь создать несколько таблиц в базе данных с помощью java (jdbc). «Код» внизу - это всего две строки, каждая из которых содержит обновление SQL CREATE TABLE, одно для таблицы «store_sales» и одно для таблицы «store_returns» Я получаю
java.sql.SQLException: не удается добавить ограничение внешнего ключаОшибка SQL - Невозможно добавить ограничение внешнего ключа

, что происходит, когда я пытаюсь сделать store_returns.sr_ticket_number внешнего ключа реферирования store_sales.ss_ticket_number в последней строке «код»

Любые идеи? Заранее спасибо.

"CREATE TABLE IF NOT EXISTS store_sales (" 
     + "ss_sold_date_sk int," 
     + "ss_sold_time_sk int," 
     + "ss_item_sk int not null," 
     + "ss_customer_sk int," 
     + "ss_cdemo_sk int," 
     + "ss_hdemo_sk int," 
     + "ss_addr_sk int," 
     + "ss_store_sk int," 
     + "ss_promo_sk int," 
     + "ss_ticket_number int not null," 
     + "primary key (ss_item_sk,ss_ticket_number)," 
     + "foreign key (ss_sold_date_sk) references date_dim (d_date_sk)," 
     + "foreign key (ss_sold_time_sk) references time_dim (t_time_sk)," 
     + "foreign key (ss_item_sk) references item (i_item_sk)," 
     + "foreign key (ss_customer_sk) references customer (c_customer_sk)," 
     + "foreign key (ss_cdemo_sk) references customer_demographics (cd_demo_sk)," 
     + "foreign key (ss_hdemo_sk) references household_demographics (hd_demo_sk)," 
     + "foreign key (ss_addr_sk) references customer_address (ca_address_sk)," 
     + "foreign key (ss_store_sk) references store (s_store_sk)," 
     + "foreign key (ss_promo_sk) references promotion (p_promo_sk)" 
     + ")" 

     , 

     "CREATE TABLE IF NOT EXISTS store_returns (" 
     + "sr_return_date_sk int," 
     + "sr_return_time_sk int," 
     + "sr_item_sk int not null," 
     + "sr_customer_sk int," 
     + "sr_cdemo_sk int," 
     + "sr_hdemo_sk int," 
     + "sr_addr_sk int," 
     + "sr_store_sk int," 
     + "sr_reason_sk int," 
     + "sr_ticket_number int not null," 
     + "primary key (sr_item_sk,sr_ticket_number)," 
     + "foreign key (sr_return_date_sk) references date_dim (d_date_sk)," 
     + "foreign key (sr_return_time_sk) references time_dim (t_time_sk)," 
     + "foreign key (sr_item_sk) references item (i_item_sk)," 
     + "foreign key (sr_customer_sk) references customer (c_customer_sk)," 
     + "foreign key (sr_cdemo_sk) references customer_demographics (cd_demo_sk)," 
     + "foreign key (sr_hdemo_sk) references household_demographics (hd_demo_sk)," 
     + "foreign key (sr_addr_sk) references customer_address (ca_address_sk)," 
     + "foreign key (sr_store_sk) references store (s_store_sk)," 
     + "foreign key (sr_reason_sk) references reason (r_reason_sk)," 
     + "foreign key (sr_ticket_number) references store_sales (ss_ticket_number)" 
     + ")" 

ответ

4

Вы не можете добавить ограничение внешнего ключа в части комбинированного внешнего ключа, как (ss_item_sk, ss_ticket_number) в store_sales. Для ограничения внешнего ключа вам необходимо адресовать все части первичного ключа таблицы, на которую делается ссылка.

Что-то вроде

foreign key (sr_item_sk, sr_ticket_number) references store_sales (ss_item_sk,ss_ticket_number) 

должен работать

+0

Благодарит миллион для супер-звуковой ответ! Извините, я новичок здесь, и я не могу продвигать (мне нужна 15 репутации) – Christos14

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