Hallo nochmals,
ah ja. Vielleicht doch noch mal ausführlicher:
Nehmen wir an, wir bauen eine ganz simple Datenbank (à la Northwind),
da wird/soll es folgende Tabellen geben.
- Kunden
1:n
- Bestellungen
1:n
- BestellArtikel
Ich mache dann also drei Scripte:
CREATE TABLE [Kunden]
(
[Id] int CONSTRAINT PK_kunden_id PRIMARY KEY CLUSTERED,
[Name] varchar(255) NOT NULL,
[eMail] varchar(255) NOT NULL
)
CREATE TABLE [Bestellungen]
(
[Id] int CONSTRAINT PK_bestellungen_id PRIMARY KEY CLUSTERED,
[Kunden_Ref] int NOT NULL,
[BestellDatum] datetime NOT NULL DEFAULT GETDATE(),
[LieferDatum] datetime ,
[RechnungDatum] datetime
)
CREATE TABLE [BestellArtikel]
(
[Id] int CONSTRAINT PK_bestellartikel_id PRIMARY KEY CLUSTERED,
[Artikel_Ref] int NOT NULL,
[Bestellung_Ref] int NOT NULL,
[Menge] smallint NOT NULL,
[EinzelNetto] money NOT NULL
)
Diese 3 Scripts kann ich noch einzeln in meinem SqlPlus oder QueryAnalyzer ausführen, allerdings setzen sie jetzt schon eine existierende Datenbank voraus, die irgendwann mal mit einem Statement à la:
CREATE DATABASE [BestellSystem]
Voriges ist natürlich sehr rudimentär und ich möchte dann vielleicht doch noch ein paar Einstellungen hinzufügen (Filegroups, was auch immer). Mit anderen Worten, es wird in einem eigenen Script verwaltet.
Was deinem wachsamen Auge sicher aufgefallen ist, es fehlen noch die FK Contraints. Auch die werden dann in Scripts für sich, mehr oder minder gesammelt nach Tabellen verwaltet. Ausgeführt auf der DB können diese natürlich erst werden, wenn die Tabellen schon da sind.
Was ich jetzt mit den Keywords erreichen will, ist dass alles entsprechend für notwendig deklarierte in einem einzigen größeren Script rauspurzelt:
CREATE DATABASE [BestellSystem]
ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Archlog1,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog1.ldf',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20)
GO
CREATE TABLE [Kunden] ( )
GO
CREATE TABLE [Bestellungen] ( )
GO
CREATE TABLE [BestellArtikel] ( )
GO
ALTER TABLE [Bestellungen] ADD CONSTRAINT FK_Bestellungen_Kunden FOREIGN KEY (Kunden_Ref) REFERENCES Kunden(Id)
GO
Um das zu erreichen füge ich im Script für das Foreign Key Constraint einfach solch ein Schlüsselwort: (Beispiel)
-- #REQUIRE OBJECT [Bestellungen]
-- #REQUIRE OBJECT [Kunden]
Darüber hinaus könnte es noch ein weiteres Schlüsselwort geben, was angibt ob das Script überhaupt verwendet werden soll...
-- #INCLUDEIN OUTPUT [FULL]
Der Prozessor soll einfach nur die einzelnen Dateien aneinanderhängen, er braucht sich überhaupt nicht mit dem SQL Dialekt auskennen. Die Kondititionen für die einzelnen Scripts zu definieren ist Aufgabe des Entwicklers. Dem Prozessor ist auch egal, ob das SQL Script logisch oder syntaktisch korrekt ist. Desterwegen bleibt es ja RDBMS-unabhängig. :)
Auch das Einfügen von Daten (Basisdaten oder auch zusätzliche Testdaten) soll damit gesteuert werden.
Ich hoffe, mein Ansinnen ist dir nun etwas klarer geworden. :)
Grüße, Frank