2016-12-16 3 views
1

Ich habe ein GUI-Programm mit einer Postgres-Datenbank. In der Datenbank habe ich eine Kundentabelle wie folgt aus:Fremdschlüssel Einschränkung für Postgres mit GUI erforderlich?

id | customer_id 
---+------ 
4 | 21 

ich nicht Foreign Keys verwende als meine GUI nicht erlaubt:

id serial Primary Key | name 
----------------------+------ 
21     | Mr. Customer 

ich einen Rechnungen Tabelle wie folgt auch haben (vereinfacht) jemand, der eine falsche Nummer für die customer_id einfügt. Allerdings sagt mir mein Freund, dass ich dumm bin, Foreign Keys nicht zu benutzen. Kann jemand auf ein mögliches Szenario hinweisen, bei dem ein falscher Wert in die Spalte customer_id eingefügt werden konnte? Ich werde meine Datenbank aus einem guten Grund ändern, aber bis jetzt habe ich keinen Grund gefunden.

+3

Ihr Freund hat Recht. Sie behaupten, dass niemand auf die Datenbank zugreifen kann, außer über Ihre GUI? – OldProgrammer

+1

Fremdschlüssel helfen, [referentielle Integrität] (https://en.wikipedia.org/wiki/Referential_integrity in relationalen Datenbanken zu erzwingen. Die Datenbank sollte dafür verantwortlich sein, sie in den meisten Szenarien zu erzwingen, nicht in Ihrer Anwendung. – Spade

+0

@OldProgrammer Nein, würde es Es wäre möglich, eine Tabelle mit PGadmin oder anderen zu bearbeiten. Ich dachte, in diesem Fall würde der Benutzer wissen, dass die customer_id von einer anderen Tabelle ist. So gabst du mir mindestens eine Instanz, dass ein FK wäre in Ordnung. Danke. – theGtknerd

Antwort

4

Es gibt mehrere Gründe,

Einfügen von Daten aus anderen Quellen.
Wie @OldProgrammer gezeigt hat, kann jemand Daten in die Tabelle einfügen, indem er pgadmin oder psql client verwendet.

löschen Kunden
Was passiert, wenn ein Kunde in der Kundentabelle gelöscht wird. Sie haben einen Eintrag in der Rechnungstabelle, in dem kein Kunde existiert.

aktualisieren Kunden
Wie oben

Zusätzliche Anfragen
Um einen Fremdschlüssel in Ihrer App manuell inforce, müssen Sie eine Auswahl aus der Kundentabelle tun, ein Benutzer, um herauszufinden, ob durch existiert. Dann können Sie nur den Einsatz durchführen. Sie machen also eine zusätzliche Abfrage, ganz zu schweigen von dem Schreiben einer Menge zusätzlichen Codes, um etwas zu ersetzen, das bereits in der Datenbank enthalten ist.

Programmierfehler
Ihre GUI kann auch einen Fehler enthalten, die ungültige Daten verursacht eingegeben werden. Eine Einschränkung in der Datenbank schützt Sie in diesem Fall. Diese Technik wird defensive Programmierung genannt und fügt Qualität zu Ihrem System für wenig Kosten hinzu.

+0

Über * Extra-Abfragen *: Alle Kunden und IDs werden in eine Combobox gefüllt.Ich brauche nicht die ID zu suchen, ich habe es bereits, wenn ein Kunde ausgewählt ist.Über * Deletin g Kunden *: In meinem Fall werden keine Kunden dauerhaft gelöscht, sie werden als gelöscht gesetzt und bleiben im System, wenn auch unsichtbar. Sie bringen mir jedoch etwas zur Kenntnis. Ein Benutzer könnte PGadmin verwenden und einen Kunden löschen. Ein FK würde diese Möglichkeit eliminieren. – theGtknerd

+0

Ich habe 1000 Kunden in einer Combobox. Die Combo hat auch einen Texteintrag zum Suchen.Wie viele Kunden braucht es, um unhandlich zu werden? – theGtknerd

+0

Sie sind schon gut in das unhandliche Gebiet. – e4c5

Verwandte Themen