PostgreSQL - EINSCHRÄNKUNGEN

Einschränkungen sind die Regeln, die für Datenspalten in der Tabelle gelten. Diese werden verwendet, um zu verhindern, dass ungültige Daten in die Datenbank eingegeben werden. Dies stellt die Genauigkeit und Zuverlässigkeit der Daten in der Datenbank sicher.

Einschränkungen können Spalten- oder Tabellenebene sein. Einschränkungen auf Spaltenebene werden nur auf eine Spalte angewendet, während Einschränkungen auf Tabellenebene auf die gesamte Tabelle angewendet werden. Das Definieren eines Datentyps für eine Spalte ist eine Einschränkung für sich. Beispielsweise beschränkt eine Spalte vom Typ DATE die Spalte auf gültige Daten.

Die folgenden Einschränkungen werden häufig in PostgreSQL verwendet.

  • NOT NULL Constraint - Stellt sicher, dass eine Spalte keinen NULL-Wert haben kann.

  • UNIQUE Constraint - Stellt sicher, dass alle Werte in einer Spalte unterschiedlich sind.

  • PRIMARY Key - Identifiziert jede Zeile / jeden Datensatz in einer Datenbanktabelle eindeutig.

  • FOREIGN Key - Beschränkt Daten basierend auf Spalten in anderen Tabellen.

  • CHECK Constraint - Die CHECK-Einschränkung stellt sicher, dass alle Werte in einer Spalte bestimmte Bedingungen erfüllen.

  • EXCLUSION Constraint - Die EXCLUDE-Einschränkung stellt sicher, dass nicht alle diese Vergleiche TRUE zurückgeben, wenn zwei Zeilen in den angegebenen Spalten oder Ausdrücken mit den angegebenen Operatoren verglichen werden.

NICHT NULL Einschränkung

Standardmäßig kann eine Spalte NULL-Werte enthalten. Wenn Sie nicht möchten, dass eine Spalte einen NULL-Wert hat, müssen Sie eine solche Einschränkung für diese Spalte definieren und angeben, dass NULL für diese Spalte jetzt nicht zulässig ist. Eine NOT NULL-Einschränkung wird immer als Spalteneinschränkung geschrieben.

Ein NULL ist nicht dasselbe wie keine Daten. Vielmehr handelt es sich um unbekannte Daten.

Beispiel

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen COMPANY1 erstellt und fünf Spalten hinzugefügt, von denen drei, ID und NAME und AGE, angeben, dass keine NULL-Werte akzeptiert werden sollen.

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Einzigartige Beschränkung

Die UNIQUE-Einschränkung verhindert, dass zwei Datensätze in einer bestimmten Spalte identische Werte haben. In der Tabelle UNTERNEHMEN möchten Sie beispielsweise verhindern, dass zwei oder mehr Personen das gleiche Alter haben.

Beispiel

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen COMPANY3 erstellt und fünf Spalten hinzugefügt. Hier ist die Spalte AGE auf EINZIGARTIG gesetzt, sodass Sie nicht zwei Datensätze mit demselben Alter haben können -

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

PRIMARY KEY-Einschränkung

Die PRIMARY KEY-Einschränkung identifiziert jeden Datensatz in einer Datenbanktabelle eindeutig. Es können mehrere EINZIGARTIGE Spalten vorhanden sein, jedoch nur ein Primärschlüssel in einer Tabelle. Primärschlüssel sind beim Entwerfen der Datenbanktabellen wichtig. Primärschlüssel sind eindeutige IDs.

Wir verwenden sie, um auf Tabellenzeilen zu verweisen. Primärschlüssel werden beim Erstellen von Beziehungen zwischen Tabellen zu Fremdschlüsseln in anderen Tabellen. Aufgrund einer langjährigen Codierungsüberwachung können Primärschlüssel in SQLite NULL sein. Dies ist bei anderen Datenbanken nicht der Fall

Ein Primärschlüssel ist ein Feld in einer Tabelle, das jede Zeile / jeden Datensatz in einer Datenbanktabelle eindeutig identifiziert. Primärschlüssel müssen eindeutige Werte enthalten. Eine Primärschlüsselspalte darf keine NULL-Werte haben.

Eine Tabelle kann nur einen Primärschlüssel haben, der aus einem oder mehreren Feldern bestehen kann. Wenn mehrere Felder als Primärschlüssel verwendet werden, werden sie als a bezeichnetcomposite key.

Wenn für eine Tabelle in einem oder mehreren Feldern ein Primärschlüssel definiert ist, können nicht zwei Datensätze mit demselben Wert für diese Felder vorhanden sein.

Beispiel

Sie haben oben bereits verschiedene Beispiele gesehen, in denen wir die Tabelle COMAPNY4 mit der ID als Primärschlüssel erstellt haben.

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

AUSLÄNDISCHE SCHLÜSSEL Einschränkung

Eine Fremdschlüsseleinschränkung gibt an, dass die Werte in einer Spalte (oder einer Gruppe von Spalten) mit den Werten in einer Zeile einer anderen Tabelle übereinstimmen müssen. Wir sagen, dies behält die referenzielle Integrität zwischen zwei verwandten Tabellen bei. Sie werden als Fremdschlüssel bezeichnet, da die Einschränkungen fremd sind. das heißt, außerhalb des Tisches. Fremdschlüssel werden manchmal als Referenzschlüssel bezeichnet.

Beispiel

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen COMPANY5 erstellt und fünf Spalten hinzugefügt.

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen DEPARTMENT1 erstellt, die drei Spalten hinzufügt. Die Spalte EMP_ID ist der Fremdschlüssel und verweist auf das ID-Feld der Tabelle COMPANY6.

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

Einschränkung prüfen

Die CHECK-Einschränkung ermöglicht es einer Bedingung, den in einen Datensatz eingegebenen Wert zu überprüfen. Wenn die Bedingung als falsch ausgewertet wird, verletzt der Datensatz die Einschränkung und wird nicht in die Tabelle eingetragen.

Beispiel

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen COMPANY5 erstellt und fünf Spalten hinzugefügt. Hier fügen wir eine Spalte CHECK with SALARY hinzu, damit Sie kein SALARY als Null haben können.

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

AUSSCHLUSS Einschränkung

Ausschlussbeschränkungen stellen sicher, dass mindestens einer dieser Operatorvergleiche false oder null zurückgibt, wenn zwei Zeilen in den angegebenen Spalten oder Ausdrücken mit den angegebenen Operatoren verglichen werden.

Beispiel

Mit der folgenden PostgreSQL-Anweisung wird beispielsweise eine neue Tabelle mit dem Namen COMPANY7 erstellt und fünf Spalten hinzugefügt. Hier fügen wir eine EXCLUDE-Einschränkung hinzu -

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,
   AGE WITH <>)
);

Hier ist USING gist die Art von Index, die erstellt und für die Durchsetzung verwendet werden soll.

Sie müssen den Befehl CREATE EXTENSION btree_gist einmal pro Datenbank ausführen . Dadurch wird die Erweiterung btree_gist installiert, die die Ausschlussbeschränkungen für einfache skalare Datentypen definiert.

Da wir durchgesetzt haben, dass das Alter gleich sein muss, lassen Sie uns dies sehen, indem wir Datensätze in die Tabelle einfügen -

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );

Für die ersten beiden INSERT-Anweisungen werden die Datensätze zur Tabelle COMPANY7 hinzugefügt. Für die dritte INSERT-Anweisung wird der folgende Fehler angezeigt:

ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).

Einschränkungen fallen lassen

Um eine Einschränkung zu entfernen, müssen Sie ihren Namen kennen. Wenn der Name bekannt ist, kann er leicht gelöscht werden. Andernfalls müssen Sie den vom System generierten Namen herausfinden. Der Tabellenname des Befehls psql \ d kann hier hilfreich sein. Die allgemeine Syntax lautet -

ALTER TABLE table_name DROP CONSTRAINT some_name;