2016-10-02 4 views
0

私はMySqlでデータベースを作成していますが、多くの関連テーブルに関連する外部キー制約を設定しようとするといくつかの問題があります。多対多関連テーブルに2つの外部キーを設定しようとすると、なぜこのエラーメッセージが表示されますか? "外部キーの制約が正しく形成されていません"

1)宿泊

だから基本的に私は、これらの2つのテーブルを持っている各レコードは、ホテルを表すと、次のフィールドがあります。

Field               Type  Null Key Default Extra      
--------------------------------------------------------------------------------------------------------------------------- 
id                bigint(20) unsigned NO PRI   auto_increment    
user_id               bigint(20) unsigned NO            
accomodation_name            varchar(100) NO            
description              text  YES            
nation               varchar(100) YES            
region               varchar(100) YES            
province               varchar(100) YES            
city                varchar(100) YES            
stars               int(10) unsigned YES            
geographical_position           point  YES            
accomodation_typological_id          bigint(20) unsigned YES MUL          
accomodation_service_id           bigint(20) YES            

2)サービス各レコードが表します前の表のホテルが提供するシングルサービス:

Field               Type  Null Key Default Extra      
--------------------------------------------------------------------------------------------------------------------------- 
id                bigint(20) NO PRI   auto_increment    
description              varchar(255) NO            

[OK]を、私は前の2つのテーブル間には多くの関係多くを実装accomodation_serviceという名前の対応表を持っている、これは、その構造である:だから

Field               Type  Null Key Default Extra      
--------------------------------------------------------------------------------------------------------------------------- 
id                bigint(20) unsigned NO PRI   auto_increment    
accomodation_id             bigint(20) unsigned NO MUL          
service_id              bigint(20) unsigned NO            

、あなたが見ることができるように、このaccomodation_serviceテーブルはの客室のテーブルとサービステーブルのレコードを関連付けます。

私の問題は、このテーブルにというの外部キーを設定しようとしています。 宿泊テーブルのみID値を含有しなければならないとのservice_idサービステーブルのみID値を含有しなければならない。accomodation_id特定で

だから私はこのように、データベースWorkBanch 5(私のIDE)が提供するグラフィカルなツールを使用してそれを行うにはtryiedています

enter image description here

私がしようとするので、私はいくつかのdificultieを見つけていますこの制約設定を実行するには、IDEから次のエラーメッセージが表示されます。

#HY000Can't create table `testdb`.`#sql-417c_4b` (errno: 150 "Foreign key constraint is incorrectly formed") 
while executing: 
ALTER TABLE accomodation_service ADD CONSTRAINT fk_accomodation_service_service FOREIGN KEY (service_id) 
    REFERENCES service (id) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 

なぜですか? IDEの問題ですか、何か不足していますか?この問題を解決するために何をすることができますか?これら2つのforeingキーを正しく設定するには、どのようなクエリを実行する必要がありますか?

答えて

0

accomodation_service関連テーブル定義したとおりに新しい主キー「ID」は必要ありません。 accomodation_serviceテーブルからID属性を削除し、 "accomodation_id"と "service_id"を複合主キーとして設定する必要があります。

関連する問題