2016-04-28 35 views
-1

lerne ich zum ersten Mal über SQL, und ich bin nach entlang von dieser Website: http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561Warum mit Fremdschlüsseln umgehen?

Der Autor geht die Mühe einen Fremdschlüssel zu erklären, aber ich glaube nicht, dass jemals etwas tut für uns. Hier ist das Beispiel von der Seite:

CREATE TABLE customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    customer_name VARCHAR(100) 
); 

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY, 
    customer_id INT, 
    amount DOUBLE, 
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
); 

INSERT INTO `customers` (`customer_id`, `customer_name`) VALUES 
(1, 'Adam'), 
(2, 'Andy'), 
(3, 'Joe'), 
(4, 'Sandy'); 

INSERT INTO `orders` (`order_id`, `customer_id`, `amount`) VALUES 
(1, 1, 19.99), 
(2, 1, 35.15), 
(3, 3, 17.56), 
(4, 4, 12.34); 

Einige Tabellen erstellt, und die customer_id in der Auftragstabelle wird die customer_id in der Kunden-Tabelle zu verweisen.

Hier ist, was mich verwirrt: Der Autor des Artikels die folgenden Aussagen mit verschiedenen Ergebnissen führt:

SELECT * FROM customers JOIN orders; 
SELECT * FROM customers NATURAL JOIN orders; 
SELECT * FROM customers JOIN orders WHERE customers.customer_id = orders.customer_id; 

Es gibt mehr Aussagen, welche LEFT und RIGHT OUTER JOIN s unter anderem, aber an keiner Stelle den Fremdschlüssel Beeinflusse alles.

Fehle ich etwas, oder sind diese Beispiele zu einfach, um die Verwendung eines Fremdschlüssels zu rechtfertigen?

Dank

Antwort

0

Die Fremdschlüsseldefinition - leider - nicht in SELECT Anweisungen verwendet. Dies ist eine Schande, denn NATURAL JOIN sollte die FOREIGN KEY Definition verwenden. "Sollte" ist hier ein moralischer Imperativ. Der ANSI-Standard gibt an, dass er Spalten mit demselben Namen anstelle der expliziten Schlüsseldefinitionen verwendet. Meiner Meinung nach gibt es keinen Grund, NATURAL JOIN zu verwenden. Vermeiden Sie stattdessen die USING Klausel.

Sie werden unter anderen Umständen verwendet. Bemerkenswerterweise validiert die Fremdschlüsseldefinition, dass in eine Tabelle eingefügte oder aktualisierte Daten korrekte Werte haben. Dies ist sehr wichtig und die Grundlage der relationalen Integrität.

Darüber hinaus ermöglichen sie kaskadierende Einschränkungen. Diese "update" -bezogenen Tabellen, wenn ein Primärschlüsselwert geändert oder gelöscht wird.

Beachten Sie, dass eine Fremdschlüsseldefinition ein vom Optimierer verwendeter Hinweis sein kann. Möglicherweise sehen Sie den Effekt nicht, aber es sind Informationen, die aus Leistungsgründen verwendet werden können.

0

Der Fremdschlüssel in der Anweisung

SELECT * FROM customers JOIN orders WHERE customers.customer_id = orders.customer_id; 

in der WHERE Klausel verwendet wird - der Teil über customers.customer_id = orders.customer_id ist genau die Anwendung der Fremdschlüsselbeziehung.

Fremdschlüssel Einschränkungen führen nicht zu impliziten Fremdschlüsselbeziehungen während einer SELECT. Der Zweck einer Einschränkung besteht darin, die Werte von Daten, die in die eingeschränkten Spalten eingefügt werden, einzuschränken ("zu beschränken"). Daher kommen sie nur während INSERT und UPDATE Operationen ins Spiel.

In diesem Fall überprüft die Datenbank bei der Einfügung oder Aktualisierung eines Werts in orders.customer_id zuerst, ob dieser Wert bereits in der Spalte customers.customer_id vorhanden ist. Wenn der Wert nicht vorhanden ist, führt die Datenbank dazu, dass die Anweisung fehlschlägt.

Verwandte Themen