Database
 sql >> Datenbank >  >> RDS >> Database

Unterschied zwischen Inline- und Out-of-Line-Einschränkungen

Einschränkungen für Tabellen und Spalten ermöglichen es Ihnen, die Datenqualität zu erzwingen. In SQL gibt es zwei Möglichkeiten, Einschränkungen für eine Tabelle zu erstellen:inline und aus der Reihe .

In diesem Artikel werde ich diese Einschränkungen und ihre Vorteile untersuchen und erklären, welche ich empfehle und warum.

Was ist eine Inline-Einschränkung?

Eine Inline-Einschränkung ist eine Einschränkung, die Sie beim Erstellen einer Tabelle in derselben Zeile wie die Spalte deklarieren.

CREATE TABLE employee (emp_id NUMBER(10) PRIMARY KEY,first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10));

In diesem Beispiel geben die Wörter PRIMARY KEY nach der Spalte emp_id an, dass emp_id der Primärschlüssel ist.

Daher haben wir eine Primärschlüsseleinschränkung für diese Spalte erstellt, indem wir die Schlüsselwörter hinzugefügt haben. Das Konzept ist unabhängig vom Einschränkungstyp dasselbe.

Was ist eine Out-of-Line-Einschränkung?

Eine Out-of-Line-Einschränkung ist die Einschränkung, die in einer separaten Zeile für die Spalte deklariert ist. Wir fügen es am Ende der CREATE TABLE-Anweisung hinzu.

Zum Beispiel haben wir das folgende Skript:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT pk_emp PRIMARY KEY (emp_id));

Wie Sie sehen können, setzen wir die PRIMARY KEY-Einschränkung namens pk_emp , in die Spalte emp_id am Ende der Anweisung.

Dieses Konzept funktioniert unabhängig vom Einschränkungstyp auf die gleiche Weise.

Lassen Sie uns nun den Unterschied zwischen diesen beiden Arten von Einschränkungen analysieren, abgesehen davon, wo sie deklariert werden.

Out-of-Line-Einschränkungen können Namen haben, die angegeben werden

Beim Erstellen von Out-of-Line-Constraints können wir einen Namen angeben. Auch wenn dies wie Zeitverschwendung erscheint, kann es hilfreich sein.

Betrachten Sie dies an einem bestimmten Beispiel:

CREATE TABLE Mitarbeiter (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT pk_emp PRIMARY KEY (emp_id),CONSTRAINT fk_emp_deptid FOREIGN KEY (dept_id) REFERENCES Department (dept_id ),CONSTRAINT ck_emp_lnlen CHECK (LÄNGE(Nachname)> 3));

Wir haben die folgenden Namen für einige Einschränkungen festgelegt:

  • pk_emp
  • fk_emp_deptid
  • ck_emp_lnlen

Es mag den Anschein haben, dass es sich nur um unnötiges Tippen handelt, aber das ist es nicht. Wir werden uns das genauer ansehen.

Warum müssen wir also einer Einschränkung einen Namen zuweisen?

Das Benennen von Einschränkungen kann in mehreren Situationen hilfreich sein. Ohne Angabe des Namens generiert Oracle automatisch einen Namen für die Einschränkung, was es für alle Inline-Einschränkungen tut. Normalerweise liefert dieser Name keine nützlichen Informationen.

Wenn Sie Fehler in SQL-Anweisungen, PL/SQL-Code oder Anwendungscode erhalten, ist es eine gute Idee, den Beschränkungsnamen zu verwenden und zu wissen, worauf er sich bezieht, oder zumindest eine Vermutung anzustellen. Solche Namen wie pk_emp oder ck_emp_lnlen wäre aussagekräftiger als das generische EMP1290894FH Name.

Außerdem wird beim Überprüfen von Ausführungsplänen häufig der Einschränkungsname in der Ausgabe verwendet, was es einfacher macht, herauszufinden, wie der Plan ausgeführt wird. Insbesondere, wenn wir Fälle haben, in denen festgestellt wird, ob Primärschlüssel oder Fremdschlüssel verwendet werden.

NOT NULL Constraints können nur inline deklariert werden

Es gibt nur einen Einschränkungstyp, der als Inline-Einschränkung deklariert werden kann. Dies ist die NOT NULL-Einschränkung.

Das bedeutet, dass Sie es nicht als out-of-line deklarieren können.

Führen Sie den folgenden Code aus:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200) NOT NULL,dept_id NUMBER(10));

Wenn wir jedoch den folgenden Code ausführen, können wir sehen, dass er nicht funktioniert:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT nn_emp_ln NOT NULL (last_name));

Zusammenfassend müssen wir die NOT NULL-Einschränkungen inline deklarieren.

CHECK-Einschränkungen können sich auf mehrere Spalten beziehen

Wenn Sie eine CHECK-Inline-Einschränkung erstellen, kann sie sich nur auf die Spalte beziehen, für die sie erstellt wird.

Wenn Sie jedoch eine CHECK-Einschränkung außerhalb der Reihe erstellen, kann sie sich auf mehrere Spalten beziehen.

Erstellen Sie den Mitarbeiter Tabelle mit der CHECK-Einschränkung wie unten gezeigt:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200) CHECK (LENGTH(first_name)> 10),last_name VARCHAR2(200),dept_id NUMBER(10));

Diese Einschränkung zeigt, dass first_name länger als 10 Zeichen sein muss.

Was aber, wenn wir angeben wollten, dass die Kombination von Vorname und Nachname muss länger als 10 Zeichen sein?

Schreiben Sie dazu den Code als Out-of-Line-Einschränkung neu:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200),,last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT ck_fullname_len CHECK (LENGTH(first_name || last_name)> 10)); 

Wir können sehen, dass diese Regel nur mit einer Out-of-Line-Einschränkung implementiert werden kann.

Empfohlene Methode

Nachdem ich beide Methoden analysiert habe:Inline oder Out-of-Line, empfehle ich die Verwendung der Out-of-Line-Einschränkungen.

Dafür gibt es einige Gründe.

Erstens können Sie einen Namen für Ihre Einschränkungen angeben und sie in Fehlermeldungen und internen Ausführungsplänen anzeigen. Es kann auch beim Deaktivieren und Aktivieren von Beschränkungen helfen.

Zweitens können Sie mit Check Constraints auf mehrere und einzelne Spalten verweisen. Daher ist es flexibler, wenn Sie sie als Out-of-Line-Einschränkung hinzufügen.

Wenn schließlich alle Einschränkungen als Out-of-Line deklariert sind (mit Ausnahme von NOT NULL, das nur als Inline-Einschränkung definiert werden kann), ist es einfacher, sich Ihre CREATE TABLE-Syntax anzusehen und alle Ihre Einschränkungen an einem Ort zu sehen. Dies ist besonders in Fällen wichtig, in denen es große Tabellen mit vielen Einschränkungen gibt.

Zusammenfassend lässt sich sagen, dass Sie Einschränkungen mit zwei verschiedenen Methoden erstellen können:Inline und Out-of-Line. Ich empfehle die Verwendung der Out-of-Line-Methode, wo immer möglich, da sie flexibler ist, und das Festlegen eines Namens für die Einschränkungen, wodurch die Analyse Ihrer Ausführungspläne und anderer SQL-Informationen vereinfacht wird.