2017-10-24 4 views
0

Ich möchte 'Postleitzahl' aus 'Adresse' Tabelle verwenden, die dort ein Primärschlüssel ist, als Fremdschlüssel in 'Kunden' Tabelle. Ich habe das selbe getan, um "RentalID" von der Miettabelle als Fremdschlüssel in der "Kunden" -Tabelle zu bekommen, aber wenn ich dasselbe für "Postleitzahl" versuche, gibt es mir diesen Fehler: "Bitte prüfen Sie, ob eine Fremdschlüsseleinschränkung vorliegt Tabelle Kunden für die Elterntabelle Adresse ".Verwendung von Fremdschlüsseln in SQL

Bitte beachten Sie, ich die Online-SQLite IDE bin mit auf khanacademy.org

Hier ist mein Code:

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"); 

Wie kann ich dieses Problem lösen?

+0

Jede Art von Adressendetails als Primärschlüssel zu verwenden ist schon eine schlechte Idee. Was passiert, wenn Menschen die gleiche Adresse haben? Diese Daten sind nicht eindeutig –

+0

@ RyanGadsdon eigentlich ist es in Ordnung, weil ich nur die Postleitzahl als Primärschlüssel in der Adressentabelle verwenden, um eine Stadt zu jeder Postleitzahl zuordnen, da die Stadt nie ändern wird. Zum Beispiel wird die Postleitzahl "DB5 3ER" immer zu "Derby" gehören, daher der "DB". Ich möchte es nur als Fremdschlüssel in den Kunden-Tisch bringen, da es die Adresse des Kunden benötigt, aber Stadt und Postleitzahl nicht ein 3. normalisiertes Formular wäre, da Stadt von der Postleitzahl abgeleitet werden könnte, so dass es im Wesentlichen Daten wiederholen würde Ich habe eine separate Tabelle für Postleitzahl und Stadt erstellt. –

Antwort

0

Im Grunde musste ich nur die Adresstabelle erstellen und somit die Postleitzahlwerte erstellen, bevor ich die Kundentabelle erstellte, da kein Fremdschlüssel eines Attributs vorhanden sein kann, das derzeit nicht existiert, da es keine geben würde Einschränkungen. Die übergeordnete Tabelle muss vor der Kundentabelle erstellt werden.

0

Fremdschlüssel funktioniert, wenn die Daten bereits in der Fremdtabelle eingefügt sind, in der der Fremdschlüssel der Primärschlüssel dieser Tabelle ist. versuche, Unterabfragen zu machen (füge innerhalb der insert-Anweisung ein)

Verwandte Themen