mk-prg-net \ ms-sql \ tsql \ddl \create-table

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

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]

Benutzerdefinierte Datentypen