私は SQL の完全な初心者で、顧客テーブルと予約テーブルがある mysql xampp サーバーを使用しています。これらのテーブルを作成するコードを生成するには、ddl を備えた mysql データ モデラーを使用します。
以下に 2 つのテーブルを作成する方法を示します。
予約テーブル:
CREATE TABLE booking (
booking_id INTEGER NOT NULL,
b_city VARCHAR(30),
b_date DATETIME,
departure_date DATETIME,
arrival_date DATETIME,
dep_time DATETIME,
arr_time DATETIME,
seat_type VARCHAR(30),
flight_cost DOUBLE,
total_cost DOUBLE,
booking_state VARCHAR(2),
deposit DOUBLE,
price_remenant DOUBLE,
customer_customer_id VARCHAR(20) NOT NULL,
flight_id INTEGER,
customer_customer_id1 VARCHAR(20) NOT NULL //I don't know why this is created again
);
CREATE UNIQUE INDEX booking__idx ON
booking (
customer_customer_id
ASC );
ALTER TABLE booking ADD CONSTRAINT booking_pk PRIMARY KEY ( booking_id );
ALTER TABLE booking
ADD CONSTRAINT booking_customer_fk FOREIGN KEY ( customer_customer_id )
REFERENCES customer ( customer_id );
ALTER TABLE booking
ADD CONSTRAINT booking_customer_fkv2 FOREIGN KEY ( customer_customer_id1 )
REFERENCES customer ( customer_id );
顧客テーブル:
CREATE TABLE customer (
customer_id VARCHAR(20) NOT NULL,
first_name VARCHAR(20),
last_name VARCHAR(30),
booking_booking_id INTEGER NOT NULL
);
CREATE UNIQUE INDEX customer__idx ON
customer (
booking_booking_id
ASC );
ALTER TABLE customer ADD CONSTRAINT customer_pk PRIMARY KEY ( customer_id );
ALTER TABLE customer
ADD CONSTRAINT customer_booking_fk FOREIGN KEY ( booking_booking_id )
REFERENCES booking ( booking_id );
これで、入力して mysql xampp サーバーに顧客を挿入しようとするたびに
INSERT INTO customer('customer_id')VALUE("1234");
エラー #1452 - 子行を追加または更新できません: 外部キー制約が失敗します (airline_db.customer, CONSTRAINT customer_booking_fk FOREIGN KEY (booking_booking_id) REFERENCES Booking (booking_id)) が表示されます。customer_id 以来、理由がわかりません。は主キーで、Booking.customer_id は外部キーですが、なぜbooking_idがこのエラーに含まれるのかわかりませんまたは
これは、私のエンティティがデータ モデラーでどのように見えるかにもなります:
ご協力をよろしくお願いいたします。
------------------------
そのような値は挿入できません
CREATE TABLE customer (
customer_id VARCHAR(20) NOT NULL,
first_name VARCHAR(20),
last_name VARCHAR(30),
booking_booking_id INTEGER NOT NULL
);
少なくとも 1 つのbooking_id を入力する必要があることを意味します。ただし、デフォルト値がないため、NULL にすることはできません。
また、外部キーは、顧客に行を追加する前に、予約時にそのような ID を保存する必要があることを意味します
最後にさらに問題があります。customer_id を持っている場合にのみ予約を追加でき、その逆も同様であるため、customer_id の制約を取り除く必要があります。
2
顧客のbooking_id外部キーを削除する必要があるということですか?どの制約ですか?
– ヴァシレイオス・ケントス
2020 年 9 月 4 日 7:25
はい。1 人の顧客が多数の予約を持つことができますが、1 つの予約で持つことができる顧客は 1 人だけです。
– nbk
2020 年 9 月 4 日 7:29