2017-06-16 2 views
0

erstmals mit Oracle DB.Oracle SQL erstellen Tabellen mit einigen Einschränkungen

ich mit einem sehr einfachen Person Tabelle fange: ["ID", "Age", "Workclass", "fnlwgt", "Education", "Education-Num", "Martial Status", "Occupation", "Relationship", "Race", "Sex", "Capital Gain", "Capital Loss", "Hours per week", "Country", "Target"]

Und eine Relationship Tabelle: ["PersonID", "RelativeID", "Relation"]

  • Die workclass einer Person nur eine der angegebenen Werte sein kann: Privat, selbst~~POS=TRUNC emp-not-inc und einige andere Werte
  • Eine Person Alter muss größer sein als sein Kind.
  • Ein Elternteil muss mindestens 12 Jahre alt
  • Ein Mann als seine Frau verdienen kann nicht mehr sein

mein erster Gedanke war, die Dinge in die Code-Ebene meines Klienten zu überprüfen, aber ich denke, es besser Wege, dies mit reinem sql zu erreichen.

Ich möchte die Tabellen mit diesen Einschränkungen schaffen, aber ich weiß wirklich nichts über Oracle SQL

+0

"Ein Mann kann nicht mehr verdienen als seine Frau". In welchem ​​Jahrhundert sind wir? –

+0

@Gordon macht mich denken, es ist eine Hausaufgabe oder etwas .. :) dh seltsame Kriterien, um eine bestimmte Logik zu "Praxis" zu generieren :) – Ditto

+0

Durch Tabellenbeschränkungen können Sie nicht erreichen, was Sie wollen. Implementieren Sie entweder Prozeduren, um diese Validierungen durchzuführen, oder verwenden Sie Trigger. –

Antwort

0

Ihre Kriterien zu erfüllen .. Ich würde versuchen Sie folgendes:

  • Die workclass eines Privat, Selbst emp-not-inc und einige andere Werte

-Setup eine andere Tabelle, mit dem Namen ": Person kann nur eine der angegebenen Werte sein workclass_type“ mit folgenden Daten:

ID WorkClass_Name 1 Privat 2 Selbst emp 3 .... und was auch immer andere Werte, die Sie benötigen.

Ändern Sie die Spalte "workclass" in der Personentabelle in "workclass_ID" , und erstellen Sie in dieser Personentabelle eine FK, die auf die ID col in workclass_type verweist.

Dies ist eine Verweisbeschränkung (- gleiche oder Fremdschlüssel) genannt. Es weist Oracle an, die Auswahl auf die Werte in dieser anderen Tabelle zu beschränken. Es ist gut für Platzersparnis (unter anderem), da Sie die vollständigen Zeichenfolge Namen auf jeder Zeile nicht speichern .. nur eine kleine numerische ID.

Sie können/sollten die ID-Spalte über Sequenz bevölkern ... aber ich werde Sie feststellen lassen, dass;)

  • Eine Person Alter muss als sein Kind größer sein.

nicht einfach über Einschränkungen gemacht ... Sie könnte über Trigger es tun, aber ich würde es nicht empfehlen .. Trigger ihre eigenen Probleme haben, und oft zu größeren Problemen führen. Ich würde eine gespeicherte Prozedur empfehlen (wie Renato in Kommentaren vorgeschlagen).

Erstellen Sie eine INS-Prozedur .. und zwingen Sie alle über diese Routine hereinzukommen. Mit anderen Worten, stellen Sie die Tabelle nicht INS/UPD zur Verfügung, sondern stellen Sie stattdessen die Prozedur zur Verfügung.

(und wenn ich Prozedur sagen, dass ich ein Verfahren in einem Paket bedeuten .. einfacher .. wieder .. Ich lasse Sie entdecken, dass jetzt, dass Sie die Terminologie) :)

  • Ein Elternteil muss über mindestens 12 Jahre alt

wieder Teil der Prozedur sein.

  • Ein Mann kann nicht mehr verdienen, als seine Frau

wieder Teil der Prozedur oben.

+0

Danke! Das ist genug für mich, um loszulegen –

Verwandte Themen