Tabellen erstellen
create table tabellenname ( spaltendeklaration | Einschräkung )
Tabellen Ändern
use geoinfo go alter table laender alter column ewz float go
Implementieren der Datenintegrität
Autoincrement
Für Primärschlüsselspalten ist es oft praktisch, die Datenbank selbst eindeutige Schlüssel beim Einfügen neuer Datensätze erzeugen zu lassen. Mittels der Eigenschaft IDENTITY kann im SQL- Server ein Zähler programmiert werden, dessen aktueller Zählerstand beim Einfügen einer neuen Zeile als Schlüsselwert genutzt wird. Nach dem Einfügen erhöht sich der Zähler automatisch um eine einstellbare Schrittweite.
Der erste Parameter von Identity gibt den Startwert an, und der zweite die Schrittweite.
create table kunde ( kd_nr int identity(100,1) not null, -- Kleinere Kundennummern als 100 werden nie erzeugt name varchar(100), vorname varchar(100), adresse varchar(255), primary key (kd_nr) ) go
Der zuletzt generierte Zählerstand kann mittels der Funktion IDENT_CURRENT('tabellenname') abgefragt werden:
insert into kunde(name, vorname) values('Hugendubel', 'Franz') declare @id int set @id = IDENT_CURRENT('kunde')
Standardwerte
create table rechnung ( nr char(5)primary key, zahlungsart int default 1 ) go
Primary Key- Einschränkung
Definiert den Primärschlüssel einer Tabelle.
create table kennzeichen ( kz char(3), land varchar(100), primary key (kz) ) go
Unique – Einschränkung
Legt fest, das in einer Spalte jeder Wert eindeutig sein muß.
create table tanblock ( kontonr char(7), lfdnr int tan char(5) unique (tan) ) go
Foreign Key- Einschränkung
Definiert Fremdschlüssel in einer Tabelle
create table staedte ( stadt varchar(255) not null, kz_land char(3), flaeche float, ewz int, primary key(stadt, kz_land), foreign key(kz_land) references kennzeichen(kz) -- definiert kz_land als Fremdschlüssel ) go
Check- Einschränkung
Durch Check wird der Wertebereich für eine Spalte beschränkt.
create table mitarbeiter ( mnr int not null primary key, check(mnr >= 100), name varchar(255) not null, vorname varchar(255) not null, strasse varchar(255) not null, plz char(5) not null, check (plz like '[0-9][0-9][0-9][0-9][0-9]') ort varchar(255) not null, tel varchar(30), geschlecht char(1) not null, eingestellt_am date not null );
check- Einschränkungen können deaktiviert werden. Siehe dazu enterprise manager/datenbank/tebellen/tabelle-bearbeiten-> Kontextmenü der Spalte .
Datenintegrität ab- und anschalten
Enthält eine Tabelle z.B. Fremdschlüssel, dann erfolgt bei jedem Einfügen eines Datensatzes eine Prüfung, ob der Fremdschlüssel in der Mastertabelle existert. Sollen z.B. Große Datenmengen in diese Tabelle eingefügt werden, dann kann dieser Prozess durch die Prüfung der Integritätsregeln stark ausgebremst werden. In diesem Falle ist es sinnvoll, die Integritätsregeln für die betroffene Tabelle abzuschalten:
use dms go alter table words nocheck constraint all -- Alle Integritätsregeln für words werden abgeschaltet
Nach dem Massenkopieren in die Tabelle können die Regeln wieder durch folgenden Befehl eingeschaltet werden:
alter table words check constraint all -- Alle Integritätsregeln für words werden wieder eingeschaltet
Fremdschlüssel mit Left und Rigth- Outer- Joins prüfen
Nach Abschalten der Integritätsregeln können beim Einfügen diese Verletzt werden. Werden die Integritätsregeln wieder eingeschaltet, bleibt die Inkonsitenz erhalten. Mittels Outer Joins können solche Verletzungen der Integrität wieder aufgespürt werden.
Standards
Standardwerte können an Spalten gebunden werden für den Fall, daß ein neuer Datensatz eingefügt wird, jedoch für eine Spalte kein Wert vorgegeben wurde.
Regeln
Regeln dienen der Domäneintegrität. Durch sie können sichergestellt werden, das Werte
- Einem Muster entsprechen (Like ...)
- einer Liste von Werten entsprechen (In (...))
- in einen Bereich von Werten fallen (Between ... and ... )
Definition einer Regel:
CREATE RULE Name_der_RegelAS @Variablenname <WHERE- Klausel>
Beispiel
CREATE RULE R_FORM_EMAIL AS @email LIKE '%@%.[A-Z][A-Z]
Regeln können an Spalten oder an Datentypen gebunden werden. Dies kann mittels folgender gespeicherter Prozedur erfolgen:
sp_bindrule Name_der_Regel, Objname[, futureonly]
Nach dem Binden werden bei allen Datenänderungen am Objekt zuvor die Daten gegen die Regeln abgeprüft.
Um die Prüfung mit Regeln wieder zu unterbinden, müssen diese vom Objekt abgekoppelt werden wie folgt:
sp_unbindrule Objname [futureonly]