heim - Service
Definition von Integritätsbeschränkungen. Erstellen gebrochener numerischer Primärschlüssel-Datentypen

PRIMARY KEY-Einschränkung

Ein PRIMÄRSCHLÜSSEL ist eine Integritätsbeschränkung auf Spaltenebene – ein Satz unterstützter Regeln –, die eine Spalte oder eine Gruppe von Spalten formal als eindeutigen Bezeichner für jede Zeile in einer Tabelle markiert.

Wenn Sie von Datenbanksystemen zu Firebird gekommen sind, die das Konzept eines „Primärindex“ zur Schlüsselbestimmung unterstützen (normalerweise dateibasierte Systeme wie Paradox, Access und MySQL), dann sind Ihnen Firebird und die Welt der SQL-Standards vertraut. Der Primärschlüssel ist kein Index, sondern eine Einschränkung. Eine der Regeln für eine solche Einschränkung besteht darin, dass der Einschränkung ein spezifischer eindeutiger Index eines oder mehrerer nicht leerer Elemente zugeordnet sein muss.

Durch die bloße Erstellung eines solchen Index wird noch kein Primärschlüssel erstellt. Das Erstellen einer Primärschlüsseleinschränkung führt jedoch zur Erstellung des erforderlichen Index, der aus den in der Einschränkungsdeklaration aufgeführten Spalten besteht.

AUFMERKSAMKEIT! Es besteht keine Notwendigkeit, einen vorhandenen „Primärindex“ aus einem älteren dateibasierten System zu importieren oder einen solchen Index zu erstellen, während auf die Deklaration einer Primärschlüsseleinschränkung gewartet wird. Firebird kann einem vorhandenen Index keine Primärschlüsseleinschränkung auferlegen – zumindest nicht in vorhandenen Versionen, einschließlich 1.5 – und der Abfrageoptimierer funktioniert nicht korrekt, wenn Indizes dupliziert werden.

Eine Tabelle kann nur einen Primärschlüssel haben. Wenn Sie eine Einschränkung definieren, erstellt Firebird mithilfe verschiedener benannter Regeln automatisch den erforderlichen Index. Die Namen der Primärschlüsselindizes werden im Folgenden erläutert.

AUFMERKSAMKEIT! Wenn Sie eine Datenbank aus einer anderen Quelle als InterBase oder Oracle in Firebird konvertieren, müssen Sie dem Schema hinsichtlich Primärschlüsselnamen und Einschränkungen besondere Aufmerksamkeit schenken.

Obwohl die PRIMARY KEY-Einschränkung selbst keine Referenzeinschränkung ist, ist sie normalerweise ein erforderlicher Teil jeder Referenzeinschränkung und ein potenzielles Subjekt der REFERENCES-Klausel der FOREIGN KEY-Einschränkung. Einzelheiten finden Sie in Kapitel 17.

Auswahl des Primärschlüssels

Die Identifizierung von Spalten als Primärschlüsselkandidaten würde den Rahmen dieser Veröffentlichung sprengen. Es wurden viele hervorragende Bücher über Normalisierung geschrieben, den Prozess der Reduzierung von Redundanz und sich wiederholenden Gruppen in Datensätzen sowie über die korrekte Identifizierung des Elements, das eine einzelne Zeile in einer Tabelle eindeutig darstellt. Wenn Sie mit relationalen Datenbanken noch nicht vertraut sind, werden die Kosten für das Erlernen eines guten Buches über Datenmodellierung nicht allzu hoch sein.

Für einen Primärschlüsselkandidaten, der eine einzelne Spalte oder eine Gruppe von Spalten sein kann, sind zwei Anforderungen erforderlich.

* Das NOT NULL-Attribut muss für alle Spalten in einer Gruppe aus einer oder mehreren Spalten deklariert werden. Schlüsselintegrität kann nur durch Vergleichen von Werten erreicht werden, und NULL ist kein Wert.

* Eine Spalte oder Spaltengruppe muss eindeutig sein – das heißt, mehr als eine Zeile mit denselben Werten darf nicht in der Tabelle erscheinen. Beispielsweise könnten ein Führerschein oder eine Sozialversicherungsnummer in Frage kommen, da sie von Systemen generiert werden, die keine doppelten Nummern zulassen.

Zu diesen theoretischen „Einstellungen“ muss noch eine dritte hinzugefügt werden.

* Die Gesamtgröße der Kandidatenschlüssel darf 252 Byte oder weniger betragen. Es geht nicht nur darum, Zeichen zu zählen. Diese Grenze muss – in manchen Fällen radikal – reduziert werden, wenn mehrere Spalten, eine nicht-binäre Sortierfolge oder ein Mehrbyte-Zeichensatz vorhanden sind.

Wie echte Daten Sie zum Scheitern bringen können

Schauen wir uns anhand der Datenbanktabelle „employee.fdb“ EMPLOYEE aus dem Verzeichnis /examples im Firebird-Stammverzeichnis (employee.gdb in Version 1.0.x) an, wie reale Daten dazu führen können, dass Ihre theoretischen Annahmen über die Einzigartigkeit falsch sind. Hier ist eine Deklaration, die die in dieser Tabelle gespeicherten aussagekräftigen Daten zeigt:

TABELLE MITARBEITER ERSTELLEN (

FIRST_NAME VARCHAR(15) NICHT NULL,

/* Annahme: Mitarbeiter muss einen Namen haben */

NACHNAME VARCHAR(20) NICHT NULL,

/* Annahme: Mitarbeiter muss einen Nachnamen haben */

PHONE_EXT VARCHAR(4),

HIRE_DATE DATE DEFAULT CURRENT_DATE NOT NULL,

DEPT_NO CHAR(3) NICHT NULL,

JOB_CODE VARCHAR (5) NICHT NULL,

JOB_GRADE SMALLINT NICHT NULL,

JOB_COUNTRY VARCHAR(15) NICHT NULL,

GEHALT NUMERISCH (15, 2) STANDARD 0 NICHT NULL,

VOLLSTÄNDIGER_NAME BERECHNET VON FIRST_NAME || || FAMILIENNAME, NACHNAME) ;

Tatsächlich hat diese Struktur keine Kandidatenschlüssel. Es ist nicht möglich, eine einzelne Mitarbeiterzeile mit (FIRST_NAME, NACHNAME) als Schlüssel zu identifizieren, da die Kombination der beiden Elemente eine mittlere bis hohe Wahrscheinlichkeit hat, innerhalb der Organisation dupliziert zu werden. Wir können die Unterlagen von zwei Mitarbeitern namens John Smith nicht speichern.

Um an die Schlüssel zu kommen, muss man etwas erfinden. Dieses „Etwas“ ist ein Mechanismus, der als Ersatzschlüssel bekannt ist.

Ersatzschlüssel

Wir haben den Ersatzschlüssel bereits im Einführungsthema zu Schlüsseln in Kapitel 14 behandelt. Ein Ersatzprimärschlüssel ist ein Wert, der garantiert eindeutig ist und keinen semantischen Inhalt hat und als Ersatzschlüssel in einer Tabellenstruktur verwendet wird, die keinen Kandidaten liefern kann Schlüssel in seiner eigenen Struktur. Aus diesem Grund wird EMP_NO zur EMPLOYEE-Tabelle (über die Domäne deklariert) hinzugefügt, um als Ersatzschlüssel zu fungieren:

DOMÄNE EMPNO SMALLINT ERSTELLEN;

TABELLE MITARBEITER ÄNDERN

ADD EMP_NO EMPNO NOT NULL,

EINSCHRÄNKUNG PK_EMPLOYEE HINZUFÜGEN

PRIMÄRSCHLÜSSEL(EMP_NO) ;

Diese Datenbank enthält außerdem einen Generator namens EMP_NO_GEN und einen Vor-Einfüge-Trigger namens SET_EMP_NO für die EMPLOYEE-Tabelle, um den Wert eines bestimmten Schlüssels abzurufen, wenn eine neue Zeile hinzugefügt wird. In Abschn. „Implementierung automatisch inkrementierender Schlüssel“ in Kapitel 31 beschreibt diese Technik ausführlich. Dies ist die empfohlene Methode zur Implementierung von Ersatzschlüsseln in Firebird.

Möglicherweise möchten Sie die Vorteile der Verwendung eines Ersatzprimärschlüssels nicht nur in dem Fall in Betracht ziehen, in dem die Tabelle keinen Kandidaten anbieten kann, sondern auch in Fällen, in denen Ihr Schlüsselkandidat zusammengesetzt ist.

Zusammengesetzte Primärschlüssel

Bei der Analyse von Daten können Sie manchmal eine einzelne eindeutige Spalte in einer Datenstruktur finden. Die Theorie besteht darin, zwei oder mehr Spalten zu finden, die als Schlüssel gruppiert sind und die Eindeutigkeit der Zeile garantieren. Wenn viele Spalten zu einem Schlüssel kombiniert werden, wird der Schlüssel als zusammengesetzter Schlüssel oder manchmal als komplexer Schlüssel bezeichnet.

Wenn Sie Erfahrung mit Datenbanksystemen wie Paradox haben, die zusammengesetzte Schlüssel zur Implementierung hierarchischer Beziehungen verwenden, können Sie sich ein Leben ohne sie möglicherweise kaum vorstellen. In der Praxis sollten zusammengesetzte Schlüssel in DBMS wie Firebird, die keine physischen Indexstrukturen auf der Festplatte durchlaufen, um Beziehungen zu implementieren, als sehr begrenzt angesehen werden.

In Firebird sind keine zusammengesetzten Indizes erforderlich und darüber hinaus werfen zusammengesetzte Indizes bei großen Tabellen einige Design- und Leistungsprobleme auf.

* Zusammengesetzte Schlüssel bestehen normalerweise aus nichtatomaren Schlüsselelementen, d. h. Die ausgewählten Spalten haben eine Bedeutung (es handelt sich um „aussagekräftige Daten“) und sind sicherlich anfällig für externe Änderungen und manuelle Eingabefehler.

* Fremdschlüssel aus anderen Tabellen, die auf diese Tabelle verweisen, duplizieren jedes Element des zusammengesetzten Schlüssels. Bei Verwendung nicht-atomarer Schlüssel ist die referenzielle Integrität beeinträchtigt. Die Kombination nichtatomarer Elemente erhöht das Risiko.

* Fremdschlüssel haben wie Primärschlüssel konstante Indizes. Für zusammengesetzte Indizes gelten strengere Größenbeschränkungen als für einspaltige Indizes.

* Zusammengesetzte Indizes sind in der Regel groß. Große Indizes verwenden mehr Datenbankseiten, was dazu führt, dass Indexvorgänge (Sortieren, Zusammenführen und Vergleichen) langsamer als nötig sind.

Atomarität von Primärschlüsselspalten

Es empfiehlt sich, keine Spalten in Primär- und Fremdschlüssel aufzunehmen, die als Daten von Bedeutung sind. Dies verstößt gegen eines der Grundprinzipien des relationalen Datenbankdesigns – die Atomizität. Das Prinzip der Atomizität erfordert, dass jedes Datenelement vollständig für sich existiert und eine einzige interne Regel seine Existenz regelt.

Damit ein Primärschlüssel atomar ist, müssen Sie über menschliche Entscheidungen hinausgehen. Wenn Menschen es komponieren oder klassifizieren, ist es nicht atomar. Wenn es einer anderen Regel als den NOT NULL- und Eindeutigkeitsanforderungen unterliegt, ist es nicht atomar. Im obigen Beispiel erfüllt selbst ein Führerschein oder eine Sozialversicherungsnummer nicht die Atomizitätsanforderungen für einen Primärschlüssel, da sie Subjekte externer Systeme sind.

Syntax der Primärschlüsseldeklaration

Sie können mehrere Syntaxoptionen verwenden, um einer Spalte oder einer Gruppe von Spalten eine PRIMARY KEY-Einschränkung zuzuweisen. Alle Spalten, die Elemente des Primärschlüssels sind, müssen mit dem Attribut NOT NULL vordefiniert sein. Da Sie einer Spalte nach deren Erstellung keine NOT NULL-Einschränkung hinzufügen können, müssen Sie sich um diese Einschränkung kümmern, bevor Sie andere Einschränkungen verwenden.

Die PRIMARY KEY-Einschränkung kann in jeder der folgenden Phasen der Metadatenerstellung angewendet werden:

* in einer Spaltendefinition in einer CREATE TABLE- oder ALTER TABLE-Anweisung als Teil der Spaltendefinition;

* in einer Tabellendefinition in einer CREATE TABLE- oder ALTER TABLE-Anweisung als separat definierte Tabelleneinschränkung.

Definieren eines Primärschlüssels als Teil einer Spaltendefinition

Die folgende Sequenz erstellt und schreibt eine nicht nullbare Domäne vor, definiert dann eine Primärschlüsselspalte basierend auf dieser Domäne und wendet gleichzeitig eine PRIMARY KEY-Einschränkung auf diese Spalte an:

CREATE DOMAIN D_IDENTITY AS BIGINT NOT NULL;

TISCHPERSON ERSTELLEN (

PERSON_ID D_IDENTITY PRIMÄRSCHLÜSSEL,

Firebird erstellt eine Tabelleneinschränkung namens INTEG_M und einen Index namens RDB$PRIMARYnn. (pl ist jeweils die vom Generator erhaltene Zahl. Die beiden Zahlen stehen in keinem Zusammenhang.) Sie können die Namen dieser Namen nicht beeinflussen und auch nicht ändern.

Das Ergebnis wird ähnlich sein, wenn Sie beim Hinzufügen einer Spalte denselben Ansatz verwenden, indem Sie die ALTER TABLE-Anweisung verwenden und den Primärschlüssel in einer Anweisung erstellen:

TISCHBUCH ÄNDERN

ADD BOOK_ID D_IDENTITY PRIMARY KEY;

Definieren eines Primärschlüssels als benannte Einschränkung

Eine andere Möglichkeit, einen Primärschlüssel in einer Tabellendefinition zu definieren, besteht darin, am Ende der Spaltendefinitionen eine Einschränkungsdeklaration hinzuzufügen. Einschränkungsdeklarationen werden an letzter Stelle platziert, da sie von der Existenz der Spalten abhängen, auf die sie verweisen. Mit dieser Methode haben Sie die Möglichkeit, Einschränkungen zu benennen. Die folgende Deklaration benennt die Primärschlüsseleinschränkung als PK_ATABLE:

TABELLE ERSTELLEN ATABLE (

ID BIGINT NICHT NULL,

ANOTHER_COLUMN VARCHAR(20),

CONSTRAINT PK_ATABLE PRIMARY KEY(ID));

Anstelle des vom System generierten Namens RDB$PRIMARYnnn verwendet Firebird jetzt PK_ATABLE als Namen dieser Einschränkung. In Firebird 1.5 und höher wird außerdem ein benutzerdefinierter Einschränkungsname auf den unterstützenden eindeutigen Index angewendet. In diesem Beispiel wird der Index PK_ATABLE heißen, während er in anderen Versionen RDB$PRIMARYnnn heißen würde.

Firebird 1.5 ermöglicht Ihnen außerdem die Verwendung benutzerdefinierter Namen für die Einschränkung und den Index, der sie unterstützt.

Verwenden eines benutzerdefinierten Index

Vor Firebird 1.5 war es nicht möglich, einen absteigenden Index zur Unterstützung eines Primärschlüssels zu verwenden. Ab Version 1.5 ist es möglich, einen Primärschlüssel mit absteigendem Index zu pflegen. Zu diesem Zweck fügt Firebird 1.5 eine Syntaxerweiterung in Form einer USING-Klausel hinzu, die es Ihnen ermöglicht, einen ASC-Index (aufsteigend) oder DESC-Index (absteigend) zu erstellen und ihm einen anderen Namen als den Einschränkungsnamen zu geben.

AS c und DESC bestimmen die Suchrichtung. Dieses Konzept wird in Kapitel 18 ausführlicher besprochen.

Die folgende Anweisung erstellt eine Primärschlüsseleinschränkung namens PK ATEST und einen unterstützenden absteigenden Index namens IDX_PK_ATEST:

TABELLE ATEST ERSTELLEN (

ID BIGINT NICHT NULL,

DATEN VARCHAR(10));

ÄNDERN SIE TABELLE ATEST

EINSCHRÄNKUNG PK_ATEST PRIMÄRSCHLÜSSEL (ID) HINZUFÜGEN

USING DESC INDEX IDX_PK_ATEST;

Eine alternative Syntax funktioniert auch:

TABELLE ATEST ERSTELLEN (

ID BIGINT NICHT NULL,

DATEN VARCHAR(10),

CONSTRAINT PK_ATEST PRIMARY KEY(ID)

USING DESC INDEX IDX PK ATEST;

AUFMERKSAMKEIT! Wenn Sie einen DESCENDING-Index für eine primäre oder eindeutige Schlüsseleinschränkung erstellen, müssen Sie USING DESC INDEX für alle Fremdschlüssel angeben, die darauf verweisen.

Hinzufügen eines Primärschlüssels zu einer vorhandenen Tabelle

Das Hinzufügen zur Einschränkungstabelle kann verzögert werden. Unter Entwicklern ist es üblich, alle ihre Tabellen ohne Tabelleneinschränkungen zu definieren und sie dann mithilfe eines separaten Skripts hinzuzufügen. Der Hauptgrund für diese Praxis: Große Skripte scheitern oft daran, dass die Autoren einige Abhängigkeiten vergessen. Es bereitet einfach weniger Kopfschmerzen, wenn Sie die Datenbank in einer Reihenfolge erstellen, die den Zeitaufwand und die Frustration beim Beheben von Abhängigkeitsfehlern und beim erneuten Ausführen von Skripts verringert.

Normalerweise deklarieren wir im ersten Skript die Tabellen und bestätigen ihre Erstellung:

TABELLE ERSTELLEN ATABLE (

ID BIGINT NICHT NULL,

ANOTHER_COLUMN VARCHAR(20),

< другие столбцы >) ;

TABELLE EINE ANDERE TABELLE ERSTELLEN (

ÄNDERN SIE TABELLE ATABLE

EINSCHRÄNKUNG PK_ATABLE HINZUFÜGEN

PRIMÄRSCHLÜSSEL(ID);

ÄNDERN SIE TABELLE EINE ANDERE TABELLE...

Wenn wir uns im nächsten Kapitel die FOREIGN KEY-Definitionen ansehen, werden die Vorteile der Erstellung einer Datenbank in einer Folge zuverlässiger Abhängigkeiten deutlich.

Aus dem Buch Datenbanken: Vorlesungsunterlagen Autor unbekannter Autor

3. Einschränkung der Integrität durch den Status Die Einschränkung der Integrität eines relationalen Datenobjekts durch den Status ist die sogenannte Dateninvariante. In diesem Fall sollte Integrität sicher von Sicherheit unterschieden werden, was wiederum den Schutz von Daten impliziert

Aus dem Buch The C# 2005 Programming Language and the .NET 2.0 Platform. von Troelsen Andrew

Einschränken der Attributverwendung Standardmäßig können benutzerdefinierte Attribute auf jeden Teil des Programmcodes (Methoden, Klassen, Eigenschaften usw.) angewendet werden. Daher kann man, wenn es nur Sinn macht, VehicleDescription verwenden, um (unter anderem) Methoden zu definieren,

Aus dem Buch DIY Linux-Server Autor

11.2.2. Beschränken des Zugriffs Ich denke, es ist notwendig, einen genaueren Blick auf die Limit-Block-Direktive zu werfen. Diese Direktive definiert den Typ und die Parameter des Zugriffs auf ein bestimmtes Verzeichnis. Betrachten Sie Listing 11.9.Listing 11.9. Beispiel für die Verwendung der Limit-Direktive

Aus dem Buch Grundlagen der objektorientierten Programmierung von Meyer Bertrand

Aus dem Buch Programming in Prolog for Artificial Intelligence Autor Bratko Ivan

Einschränken des Client-Zugriffs Um den Client-Zugriff auf eine bestimmte Komponente h einzuschränken, wird die Möglichkeit genutzt, zwei oder mehr Feature-Abschnitte in die Klassendeklaration aufzunehmen. Die Deklaration würde so aussehen: class S2 featuref ...g ...feature (A, B)h ......endComponents f und g

Aus dem Buch Double Sales in an Online Store Autor Parabellum Andrey Alekseevich

5.1. Einschränkende Suche Beim Erreichen eines Ziels durchsucht das Prolog-System automatisch Optionen und gibt zurück, wenn eine davon fehlschlägt. Diese Art der Suche ist ein nützlicher Softwaremechanismus, da sie den Benutzer davon befreit

Aus dem Buch Firebird DATABASE DEVELOPER'S GUIDE von Borri Helen

Beschränkung Das zweite Element der EDI-Formel ist die Frist (aus dem Englischen „deadline“) oder Beschränkung. Dabei kann es sich um eine zeitliche Begrenzung (z. B. 50 % Rabatt für nur zwei Tage) oder eine Mengenbegrenzung (z. B. ein wertvolles Geschenk für die ersten 50 Kunden) handeln. Darüber hinaus funktionieren kurze Fristen

Aus dem Buch Omert@. Ein Leitfaden zur Computersicherheit und zum Informationsschutz für große Bosse von Axler Alex

Referenzbeschränkung Eine Referenzbeschränkung wird als FOREIGN KEY implementiert. Eine Fremdschlüsseleinschränkung existiert nur im Kontext einer anderen Tabelle und des eindeutigen Schlüssels dieser Tabelle, der entweder explizit oder implizit in der REFERENCES-Klausel angegeben wird, wenn die Einschränkung in verlinkt wird

Aus dem Buch Linux aus der Sicht eines Hackers Autor Flenov Michail Evgenievich

NOT NULL-Einschränkung Firebird unterstützt kein Nullwertattribut, wie dies bei einigen nicht standardmäßigen DBMS der Fall ist. Gemäß den Standards können alle Spalten in Firebird einen Nullwert enthalten, sofern keine explizite NOT NULL-Einschränkung angegeben ist.

Aus dem Buch InterBase World. Architektur, Administration und Entwicklung von Datenbankanwendungen in InterBase/FireBird/Yaffil Autor Kowjasin Alexej Nikolajewitsch

Aus dem Buch Anonymität und Sicherheit im Internet. Von der „Teekanne“ bis zum Nutzer Autor Kolisnitschenko Denis Nikolajewitsch

Aus dem Buch des Autors

4.11.5. Netzwerkbeschränkung In großen Netzwerken ist es sehr schwierig, jeden Computer zu beschreiben. Um diese Aufgabe zu erleichtern, können Sie Gruppeneinträge verwenden. Beispielsweise müssen Sie den Zugriff auf das Internet nur für das Netzwerk 192.168.1.x (mit einer Maske von 255.255.255.0) zulassen. Das bedeutet, dass die ersten 24 Bits (die ersten drei)

Aus dem Buch des Autors

9.5.8. Kanalbeschränkung Bei der Organisation des Internetzugangs müssen einzelne Benutzer häufig höhere Verbindungsgeschwindigkeiten bereitstellen. Wie geht das, wenn standardmäßig alle gleich sind und mit der jeweils maximal verfügbaren Geschwindigkeit arbeiten können?

Aus dem Buch des Autors

CHECK-Einschränkung Eine der nützlichsten Einschränkungen in einer Datenbank ist die Check-Einschränkung. Die Idee ist sehr einfach: Überprüfen Sie den in die Tabelle eingefügten Wert auf eine Bedingung und fügen Sie je nach Erfüllung der Bedingung Daten ein oder nicht

Aus dem Buch des Autors

P2.4. Zugangsbeschränkung P2.4.1. Zugriff auf eine Site (oder eine Liste von Sites) verweigern Nehmen wir an, dass Sie den Zugriff auf eine bestimmte Site (oder eine Liste von Sites) blockieren müssen. Gehen Sie dazu auf den Bereich Abrechnung | Kunden | Filter | Vor der Gruppe (Abb. A2.10). Führen Sie den Menübefehl Aktion | aus

Aus dem Buch des Autors

P2.4.2. Geschwindigkeitsbegrenzung Um die Geschwindigkeit eines bestimmten Benutzers zu begrenzen, wählen Sie ihn in der Benutzerliste aus, klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften. Gehen Sie zur Registerkarte „Einschränkungen“ (Abb. A2.14) und deaktivieren Sie das Kontrollkästchen „Standard“.

Der 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. Die Primärschlüsselspalte darf keinen Wert 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, spricht man von einem zusammengesetzten Schlüssel.

Wenn in einer Tabelle für ein oder mehrere Felder ein Primärschlüssel definiert ist, können Sie für dieses Feld/diese Felder nicht zwei Datensätze mit demselben Wert haben.

Notiz– Sie können diese Konzepte beim Erstellen von Datenbanktabellen verwenden.

Erstellen eines Primärschlüssels

Hier ist die Syntax zum Definieren des ID-Attributs als Primärschlüssel in der Tabelle „Kunden“.

CREATE TABLE CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID));

Um eine Primärschlüsseleinschränkung für die Spalte „ID“ zu erstellen, wenn die Tabelle CUSTOMERS bereits vorhanden ist, verwenden Sie die folgende SQL-Syntax:

ALTER TABLE CUSTOMERS HINZUFÜGEN PRIMÄRSCHLÜSSEL (ID);

Notiz

Wenn Sie die ALTER TABLE-Anweisung verwenden, um einen Primärschlüssel hinzuzufügen, müssen die Primärschlüsselspalten bereits so deklariert worden sein, dass sie keine NULL-Werte enthalten (sofern die Tabelle zuerst erstellt wurde).

Um einen Primärschlüssel für mehrere Spalten zu definieren, verwenden Sie die folgende SQL-Syntax:

CREATE TABLE CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID, NAME));

Um eine Primärschlüsseleinschränkung für die Spalten ID und NAME zu erstellen, wenn die Tabelle CUSTOMERS bereits vorhanden ist, verwenden Sie die folgende SQL-Syntax.

ALTER TABLE CUSTOMERS ADD CONSTRAINT PK_CUSTID PRIMARY KEY (ID, NAME);

Löschen eines Primärschlüssels

Mit der unten angegebenen Syntax können Sie Primärschlüsseleinschränkungen aus einer Tabelle löschen.

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

Ich präsentiere Ihnen eine kostenlose Übersetzung des Artikels SQL für Anfänger Teil 2

Für jeden Webentwickler ist es wichtig, mit Datenbanken interagieren zu können. Im zweiten Teil lernen wir die Sprache weiter SQL und wenden unsere Fähigkeiten auf DBMS an MySQL. Wir werden Indizes, Datentypen und komplexere Abfragen untersuchen.

Was brauchen Sie

Weitere Informationen finden Sie im Abschnitt „Was Sie benötigen“ im ersten Teil.

Wenn Sie diese Beispiele auf Ihrem Server ausführen möchten, gehen Sie wie folgt vor:

  1. Öffnen Sie Ihre Konsole MySQL und melden Sie sich an.
  2. Erstellen Sie mithilfe der Abfrage die Datenbank „my_first_db“. ERSTELLEN, sofern es noch nicht erstellt wurde.
  3. Wechseln Sie die Basis mit dem Operator VERWENDEN.

Indizes

Indizes (oder Schlüssel) werden häufig verwendet, um die Ausführungsgeschwindigkeit von Anweisungen zu verbessern, die Daten auswählen (z. B WÄHLEN) aus den Tabellen.

Sie sind ein wichtiger Bestandteil einer guten Datenbankarchitektur; es ist schwierig, sie als „Optimierung“ einzustufen. Normalerweise werden Indizes zunächst hinzugefügt, können aber später mithilfe einer Abfrage hinzugefügt werden TABELLE ÄNDERN.

Die Hauptgründe für die Indizierung von Datenbankspalten sind:

  • Fast jede Tabelle hat einen Primärschlüssel ( PRIMÄRSCHLÜSSEL), normalerweise ist dies die Spalte „id“.
  • Wenn eine Spalte eindeutige Werte speichern soll, muss sie über einen eindeutigen Index verfügen ( EINZIGARTIG).
  • Wenn Sie eine häufige Suche nach einer Spalte benötigen (in einem Satz verwenden). WO), es muss einen regulären Index haben ( INDEX).
  • Wenn eine Spalte zur Verknüpfung mit einer anderen Tabelle verwendet wird, sollte es sich nach Möglichkeit um einen Fremdschlüssel handeln ( UNBEKANNTER SCHLÜSSEL) oder ein regulärer Index.

Primärschlüssel (PRIMÄRSCHLÜSSEL)

Fast alle Tabellen haben einen Primärschlüssel, normalerweise eine Ganzzahl mit einer automatischen Inkrementierungsoption ( AUTO_INCREMET).

Unterabfragen führen häufig zu erheblichen Leistungseinbußen. Sie sollten daher mit Vorsicht verwendet werden.

UNION: Daten kombinieren

Abfrage verwenden UNION können Sie die Ergebnisse mehrerer SELECT-Abfragen kombinieren.

In diesem Beispiel werden Staaten, die mit dem Buchstaben „N“ beginnen, mit Staaten mit größerer Bevölkerungszahl kombiniert:

(SELECT * FROM states WHERE name LIKE "n%") UNION (SELECT * FROM states WHERE population > 10000000);

Bitte beachten Sie, dass New York ein großer Staat ist und mit dem Buchstaben „N“ beginnt. Es erscheint jedoch nur einmal in der Liste, weil Duplikate werden automatisch entfernt.

Auch die Schönheit der Anfragen UNION besteht darin, dass sie zum Zusammenführen von Abfragen für verschiedene Tabellen verwendet werden können.

Wir haben zum Beispiel Tabellen Mitarbeiter (Angestellte), Manager (Manager) und Kunden (Kunden). Jede Tabelle verfügt über ein Feld mit einer E-Mail-Adresse. Wenn wir alle E-Mail-Adressen in einer Anfrage erhalten möchten, können wir Folgendes tun:

(E-Mail von Mitarbeitern auswählen) UNION (E-Mail von Managern auswählen) UNION (E-Mail von Kunden auswählen, WO abonniert = 1);

Durch das Ausfüllen dieser Anfrage erhalten wir die Postanschriften aller Mitarbeiter und Manager und nur der Kunden, die in die Mailingliste eingetragen sind.

EINFÜGEN Fortsetzung

Wir haben bereits über die Anfrage gesprochen EINFÜGEN im vorherigen Artikel. Nachdem wir uns nun die Indizes angesehen haben, können wir über zusätzliche Abfragefunktionen sprechen EINFÜGEN.

EINFÜGEN ... BEI DUPLICATE KEY UPDATE

Dies ist die am häufigsten verwendete Bedingung. Zuerst wird versucht, die Anfrage auszuführen EINFÜGEN und wenn die Anfrage aufgrund eines doppelten primären ( PRIMÄRSCHLÜSSEL) oder einzigartig ( EINZIGARTIGER SCHLÜSSEL)-Taste, dann wird die Anfrage ausgeführt AKTUALISIEREN.

Lassen Sie uns zunächst eine Testtabelle erstellen.

Dies ist ein Tisch zur Aufbewahrung von Lebensmitteln. Im Feld „Lagerbestand“ wird die Anzahl der vorrätigen Produkte gespeichert.

Versuchen wir nun, einen vorhandenen Wert in die Tabelle einzufügen und zu sehen, was passiert.

Wir haben eine Fehlermeldung erhalten.

Nehmen wir an, wir haben eine neue Bäckerei und möchten die Datenbank aktualisieren, wissen aber nicht, ob bereits ein Eintrag in der Datenbank vorhanden ist. Wir können zunächst prüfen, ob der Datensatz vorhanden ist, und dann eine weitere Einfügeabfrage ausführen. Oder Sie können alles in einer einfachen Abfrage erledigen:

Funktioniert genauso wie EINFÜGEN, aber mit einer wichtigen Funktion. Wenn der Datensatz bereits vorhanden ist, wird er gelöscht und anschließend die Abfrage ausgeführt EINFÜGEN, und wir erhalten keine Fehlermeldungen.

Bitte beachten Sie, denn Wird eine komplett neue Zeile eingefügt, wird das Autoinkrementierungsfeld um eins erhöht.

Dies ist eine Möglichkeit, das Auftreten von Duplizierungsfehlern von vornherein zu verhindern und die Anwendung am Laufen zu halten. Möglicherweise müssen Sie eine neue Zeile einfügen, ohne dass Fehler ausgegeben werden, selbst wenn eine Duplizierung vorliegt.

Es liegen keine Fehler oder aktualisierten Zeilen vor.

Datentypen

Jede Spalte in einer Tabelle muss einen bestimmten Typ haben. Wir haben bereits Typen verwendet INT, VARCHAR Und DATUM, ging aber nicht näher darauf ein. Wir werden uns auch einige weitere Datentypen ansehen.

Beginnen wir mit numerischen Datentypen. Ich teile sie in zwei Gruppen ein: ganze Zahlen und Brüche.

Ganz

In einer Integer-Spalte können nur natürliche Zahlen (kein Dezimalpunkt) gespeichert werden. Standardmäßig können sie positiv oder negativ sein. Wenn die Option ausgewählt ist OHNE VORZEICHEN, dann können nur positive Zahlen gespeichert werden.

MySQL unterstützt 5 Arten von Ganzzahlen unterschiedlicher Größe und Bereiche:

Bruchzahlige numerische Datentypen

Diese Typen können Bruchzahlen speichern: FLOAT, DOUBLE und DECIMAL.

FLOAT benötigt 4 Bytes, DOUBLE benötigt 8 Bytes und ähnelt dem vorherigen. DOUBLE ist genauer.

DECIMAL(M,N) hat eine variable Genauigkeit. M ist die maximale Anzahl an Ziffern, N ist die Anzahl an Nachkommastellen.

Beispielsweise hat DECIMAL(13,4) 9 Dezimalstellen und 4 Dezimalstellen.

String-Datentypen

Anhand des Namens können Sie erraten, dass sie Zeichenfolgen speichern können.

CHAR(N) kann N Zeichen speichern und hat einen festen Wert. Beispielsweise muss CHAR(50) in der gesamten Spalte immer 50 Zeichen pro Zeile enthalten. Der maximal mögliche Wert beträgt 255 Zeichen

VARCHAR(N) funktioniert genauso, der Bereich kann jedoch variieren. N – bezeichnet den Maximalwert. Wenn die gespeicherte Zeichenfolge kürzer als N Zeichen ist, nimmt sie weniger Platz auf der Festplatte ein. Der maximal mögliche Wert beträgt 65535 Zeichen.

Varianten des Typs TEXT eignen sich besser für lange Zeichenfolgen. TEXT hat ein Limit von 65535 Zeichen, MEDIUMTEXT hat ein Limit von 16,7 Millionen und LONGTEXT hat ein Limit von 4,3 Milliarden Zeichen. Normalerweise speichert MySQL sie in separaten Speichern auf dem Server, sodass der Hauptspeicher möglichst klein und schnell ist.

.

Abschluss

Vielen Dank, dass Sie den Artikel gelesen haben. SQL ist eine wichtige Sprache und ein wichtiges Werkzeug im Arsenal eines Webentwicklers.

Letzte Aktualisierung: 27.04.2019

Mit Fremdschlüsseln können Sie Beziehungen zwischen Tabellen herstellen. Ein Fremdschlüssel wird für Spalten einer abhängigen, untergeordneten Tabelle festgelegt und zeigt auf eine der Spalten der Haupttabelle. Normalerweise verweist ein Fremdschlüssel auf einen Primärschlüssel aus einer zugehörigen Mastertabelle.

Die allgemeine Syntax zum Festlegen eines Fremdschlüssels auf Tabellenebene lautet:

AUSLÄNDISCHER SCHLÜSSEL (Spalte1, Spalte2, ... SpalteN) REFERENZEN main_table (main_table_column1, main_table_column2, ... main_table_columnN)

Um eine Fremdschlüsseleinschränkung zu erstellen, geben Sie nach FOREIGN KEY die Tabellenspalte an, die den Fremdschlüssel darstellen soll. Und nach dem Schlüsselwort REFERENCES wird der Name der zugehörigen Tabelle angegeben und dann in Klammern der Name der zugehörigen Spalte, auf die der Fremdschlüssel verweist. Nach dem REFERENCES-Ausdruck gibt es die Ausdrücke ON DELETE und ON UPDATE, die die Aktion beim Löschen bzw. Aktualisieren einer Zeile aus der Haupttabelle angeben.

Definieren wir beispielsweise zwei Tabellen und verknüpfen sie mithilfe eines Fremdschlüssels:

CREATE TABLE Kunden (ID INT PRIMARY KEY AUTO_INCREMENT, Alter INT, Vorname VARCHAR(20) NICHT NULL, Nachname VARCHAR(20) NICHT NULL, Telefon VARCHAR(20) NICHT NULL EINZIGARTIG); CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customers (Id));

In diesem Fall werden die Tabellen „Kunden“ und „Bestellungen“ definiert. Der Kunde steht im Mittelpunkt und repräsentiert den Kunden. „Bestellungen“ ist abhängig und stellt die vom Kunden aufgegebene Bestellung dar. Die Orders-Tabelle ist über die CustomerId-Spalte mit der Customers-Tabelle und ihrer Id-Spalte verknüpft. Das heißt, die Spalte „CustomerId“ ist ein Fremdschlüssel, der auf die Spalte „Id“ aus der Tabelle „Customers“ verweist.

Sie können den CONSTRAINT-Operator verwenden, um einen Namen für eine Fremdschlüsseleinschränkung anzugeben:

CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINTorders_custonmers_fk FOREIGN KEY (CustomerId) REFERENCES Customers (Id));

BEIM LÖSCHEN und BEIM AKTUALISIEREN

Mit den Anweisungen ON DELETE und ON UPDATE können Sie die Aktionen festlegen, die ausgeführt werden, wenn eine zugehörige Zeile aus der Haupttabelle gelöscht bzw. geändert wird. Als Aktion können folgende Optionen genutzt werden:

    CASCADE: Löscht oder ändert automatisch Zeilen aus einer abhängigen Tabelle, wenn verwandte Zeilen in der Mastertabelle gelöscht oder geändert werden.

    SET NULL: Beim Löschen oder Aktualisieren einer zugehörigen Zeile aus der Haupttabelle wird die Fremdschlüsselspalte auf NULL gesetzt. (In diesem Fall muss die Fremdschlüsselspalte die NULL-Einstellung unterstützen)

    RESTRICT: Lehnt das Löschen oder Ändern von Zeilen in der Haupttabelle ab, wenn in der abhängigen Tabelle verwandte Zeilen vorhanden sind.

    KEINE AKTION: dasselbe wie EINSCHRÄNKEN.

    SET DEFAULT: Beim Löschen einer zugehörigen Zeile aus der Haupttabelle wird die Fremdschlüsselspalte auf den Standardwert gesetzt, der mit dem DEFAULT-Attribut angegeben wird. Obwohl diese Option grundsätzlich verfügbar ist, unterstützt die InnoDB-Engine diesen Ausdruck nicht.

Kaskadierendes Löschen

Durch kaskadierendes Löschen können Sie automatisch alle zugehörigen Zeilen aus der abhängigen Tabelle löschen, wenn Sie eine Zeile aus der Haupttabelle löschen. Verwenden Sie dazu die CASCADE-Option:

CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE);

Der ON UPDATE CASCADE-Ausdruck funktioniert auf ähnliche Weise. Wenn Sie den Wert eines Primärschlüssels ändern, ändert sich automatisch auch der Wert des zugehörigen Fremdschlüssels. Da sich Primärschlüssel jedoch sehr selten ändern und es im Allgemeinen nicht empfohlen wird, Spalten mit veränderlichen Werten als Primärschlüssel zu verwenden, wird der ON UPDATE-Ausdruck in der Praxis selten verwendet.

Einstellung NULL

Wenn Sie die Option SET NULL für einen Fremdschlüssel festlegen, muss die Fremdschlüsselspalte NULLABLE sein:

CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET NULL);

) haben wir uns angeschaut, wie eine relationale (tabellarische) Datenbank aufgebaut ist, und herausgefunden, dass die Hauptelemente einer relationalen Datenbank sind: Tabellen, Spalten und Zeilen, und in mathematischen Begriffen: Beziehungen, Attribute und Tupel. Außerdem werden Zeilen häufig als Datensätze, Spalten als Spalten und der Schnittpunkt eines Datensatzes mit einer Spalte als Zelle bezeichnet.

Es ist wichtig zu beachten, dass die Zeileninhalte und Spaltennamen innerhalb derselben Datenbank eindeutig sein müssen.

Datentypen in Datenbanken

Es ist wichtig zu verstehen, dass Sie Datenbanken für jede Art von Daten erstellen können: Texte, Daten, Zeiten, Ereignisse, Zahlen. Abhängig von der Art der Informationen werden relationale Datenbanken in Typen unterteilt. Jeder Datentyp (Attribut) hat eine eigene Bezeichnung:

  • INTEGER – Daten aus ganzen Zahlen;
  • FLOAT – Daten aus Bruchzahlen, sogenannte Gleitkommadaten;
  • CHAR, VARCHAR – Textdatentypen (Zeichen);
  • LOGICAL – logischer Datentyp (ja/nein);
  • DATUM/ZEIT – Zeitdaten.

Dies sind die wichtigsten Arten von Daten, von denen es tatsächlich noch viel mehr gibt. Darüber hinaus verfügt jede Programmiersprache über einen eigenen Satz an Systemattributen (Datentypen).

Was ist der Primärschlüssel und der Fremdschlüssel relationaler Datenbanktabellen?

Primärschlüssel

Wir haben uns oben daran erinnert: Jede Zeile (Datensatz) der Datenbank muss eindeutig sein. Es ist der Primärschlüssel in Form von Sätzen spezifischer Werte, der jeden Datensatz maximal identifiziert. Es kann unterschiedlich definiert werden. Primärschlüssel: Eine Reihe spezifischer Merkmale, die für jeden Datensatz eindeutig sind. Der Primärschlüssel wird als Primärschlüssel bezeichnet.

Primärschlüssel (PK) sehr wichtig für jeden Tisch. Lassen Sie mich erklären, warum.

  • Der Primärschlüssel erlaubt keine Erstellung identischer Datensätze (Zeilen) in der Tabelle.
  • PKs stellen eine logische Verbindung zwischen Tabellen in einer Datenbank bereit (für relationale Datenbanken).

Es lohnt sich, näher auf den logischen Zusammenhang zwischen den Tabellen einzugehen.

Unbekannter Schlüssel

Fremdschlüssel, kurz FK. Bietet eine eindeutige logische Verbindung zwischen Tabellen einer Datenbank.

Beispielsweise gibt es zwei Tabellen A und B. In Tabelle A (Schuhe) gibt es einen Primärschlüssel: Größe, in Tabelle B (Farbe) sollte es eine Spalte namens Größe geben. In dieser Tabelle ist „size“ der Fremdschlüssel für die logische Verbindung der Tabellen B und A.

Ein komplexeres Beispiel.

Zwei Datentabellen: Personen und Telefonnummern.

Tabelle: Menschen

Tabelle: Telefonnummern

In der Tabelle „Telefonnummern“ ist PK eindeutig. Der FK dieser Tabelle ist der PK der People-Tabelle. Die Verbindung zwischen Telefonnummern und Personen wird durch FK-Telefontabellen hergestellt. Also:

  • Zaitsev hat zwei Telefone;
  • Volkov hat zwei Telefone;
  • Belkin hat ein Telefon.
Primärschlüssel und Fremdschlüssel

Abschließend möchte ich hinzufügen, dass jeder, Der Datenbankmanager verfügt über die technische Fähigkeit, einen Primärschlüssel zu erstellen.



 


Lesen:



Anweisungen, was zu tun ist, wenn Ihnen so etwas passiert

Anweisungen, was zu tun ist, wenn Ihnen so etwas passiert

In diesem Artikel erkläre ich Ihnen, wie Sie Ihren Computer vor der Neuinstallation des Betriebssystems bewahren, wenn das lokale Windows-Administratorkonto...

Booten einer virtuellen Maschine von einem Flash-Laufwerk mit dem Virtual Machine USB Boot-Programm Virtual OS auf einem Flash-Laufwerk

Booten einer virtuellen Maschine von einem Flash-Laufwerk mit dem Virtual Machine USB Boot-Programm Virtual OS auf einem Flash-Laufwerk

Der Artikel befasst sich mit der Frage, wie man überprüfen kann, ob ein bootfähiges Flash-Laufwerk in VirtualBox funktioniert. Ich werde es zuerst installieren und prüfen, ob es funktioniert ...

Was ist der Unterschied zwischen PCI Express 2

Was ist der Unterschied zwischen PCI Express 2

Wenn es um Schnittstellen im Zusammenhang mit Computersystemen geht, muss man sehr aufpassen, dass man nicht auf inkompatible Schnittstellen „stößt“ ...

Grundeinrichtung von Netis WF2780

Grundeinrichtung von Netis WF2780

Für den allgemeinen Gebrauch. Modelle dieser Marke sind perfekt für die meisten Benutzer, die schnelles, unterbrechungsfreies Internet und gute... benötigen.

Feed-Bild RSS