2017-10-24 11 views
0

「顧客」テーブルの外部キーとして、そこに主キーである「アドレス」テーブルから「郵便番号」を使用します。私は 'RentalID'をレンタルテーブルから 'customers'テーブルの外部キーとして取得していましたが、 'Postcode'で同じことをしようとすると、このエラーが表示されます: "親テーブルアドレスのテーブル顧客 "を選択します。SQLでの外部キーの使用

私はここでkhanacademy.org

でオンラインSQLiteのIDEを使用していますのでご注意ください私のコードです:

CREATE TABLE rentals 
(RentalID INTEGER PRIMARY KEY, CarRegistration TEXT, DateHired TEXT, 
DateReturned TEXT); 

INSERT INTO rentals VALUES ( 1, "J986NDX", "12.2.94", "25.8.94"); 
INSERT INTO rentals VALUES ( 2, "K788NRT", "1.3.95", "1.4.96"); 
INSERT INTO rentals VALUES ( 3, "L346NDS", "2.4.96", ""); 
INSERT INTO rentals VALUES ( 4, "J986NDX", "15.9.94", "14.9.95"); 
INSERT INTO rentals VALUES ( 5, "M411NGT", "15.9.95", "1.2.96"); 

CREATE TABLE customers (CustomerID INTEGER, CustomerSurname TEXT, 
Customerinitial TEXT, Companyname TEXT, Postcode TEXT, RentalID INTEGER , 
PRIMARY KEY(CustomerID, RentalID), FOREIGN KEY (RentalID) REFERENCES 
rentals(RentalID), FOREIGN KEY (Postcode) REFERENCES address(Postcode)); 

INSERT INTO customers VALUES (153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 1); 
INSERT INTO customers VALUES (153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 2); 
INSERT INTO customers VALUES (187, "Brown", "L", "MF Plastics", "DB5 3ER", 
3); INSERT INTO customers VALUES (287, "Pinner", "M", "Took Ltd", "DB6 
8YU", 4); INSERT INTO customers VALUES (287, "Pinner", "M", "Took Ltd", 
"DB6 8YU", 5); 

CREATE TABLE address (Postcode TEXT PRIMARY KEY, town TEXT); 
INSERT INTO address VALUES ("DB5 3ER", "Derby"); 
INSERT INTO address VALUES ("DB6 8YU", "Derby"); 

は、これはどのように解決することができますか?

+0

アドレスの詳細をプライマリキーとして使用することは、すでに悪い考えです。人々が同じ住所を持っているとどうなりますか?そのデータはユニークではありません –

+0

@ RyanGadsdon実際には、アドレステーブルの主キーとして郵便番号を使用していますので、町は決して変わらないでしょうから、各郵便番号に町をマップしています。たとえば、郵便番号 "DB5 3ER"は常に "Derby"、つまり "DB"に属します。私はそれが顧客の住所を必要とするので、顧客のテーブルへの外部キーとしてそれを持って来たいだけです。町と郵便番号は、町が郵便番号から派生することができるので、本質的に繰り返されるデータ私は郵便番号と町のための別のテーブルを作成しました。 –

答えて

0

基本的に私がしなければならないのは、存在しない属性の外部キーを持つことができないため、住所テーブルを作成して郵便番号の値を作成することでした。制約。親テーブルはcustomersテーブルの前に作成する必要があります。

0

外部キーは、その外部キーがそのテーブルの主キーである外部テーブルに既に挿入されている場合に機能します。サブクエリを実行してみてください(insert文の中に挿入してください)