Microsoft SQL-Server 2000 Anleitung 1 Integritätsbedingungen und Constraints Unter constraints (=Einschränkungen) versteht man Begrenzungen des Wertebereichs von Attributen. Constraints können Spalten oder Tabellen zugeordnet werden. Einige constraints haben Sie schon oft verwendet: Not Null Das Attribut muss einen Wert enthalten Unique Attributwert muss eindeutig sein Primary key Das Attribut (oder die Kombination von Attributen) ist Primärschlüssel Foreign key Das Attribut ist in einer anderen Tabelle als Primärschlüsel vorhanden On delete cascade Das Löschen eines Datensatzes führt zum kaskadierenden Löschen der über foreign key verbundenen Datensätze Sehen wir uns zunächst an, wie Fremdschlüssel festgelegt werden, und welche Wirkung sie haben: Aufgabe: Im Query Analyzer soll die Datenbank SQL aktiviert werden. In der Datenbank wird eine Tabelle kunden erstellt: create table kunden( Kunden_nr smallint primary key, nachname varchar(20), vorname varchar(30)) Zusätzlich soll eine Tabelle konten erstellt werden. Kunden können mehrere Konten haben, deshalb wird die kunden_nr (Primärschlüssel in der Tabelle Kunden) hier mit der referentiellen Integrität festgelegt: create table konten( Konto_nr smallint primary key, kunden_nr smallint references kunden, kontostand decimal(12,2)) Aufgabe: Erfassen Sie (der Einfachheit halber mit dem Enterprise Manager) die folgenden Kunden: Aufgabe: Erfassen Sie dann in der Tabelle Konten diese Daten: - 45 - Microsoft SQL-Server 2000 Anleitung Nach dem Eingeben der letzten Zeile (Kunden_nr 5 existiert nicht) erfolgt die Fehlermeldung: Aufgabe: Öffnen Sie noch einmal die Tabelle Kunden. Versuchen Sie, einen Kunden zu löschen, der ein Konto hat. Die folgende Warnmeldung wird mit Ja beantwortet: Danach meldet der SQL Server dann wieder die Fehlermeldung von oben. Damit sind die beiden Bedingungen der referentiellen Integrität erfüllt. 1.1 Tabelleneinschränkunen mit Namen versehen Häufig werden constaints gegeben, denen man direkt einen Namen zuweisen will. Dies ist zwar optional, aber oft empfehlenswert. Sehen Sie sich noch einmal die create-tableAnweisung von der vorigen Seite an: create table kunden( Kunden_nr smallint primary key, nachname varchar(20), vorname varchar(30)) Wenn die Einschränkung, die durch den Primärschlüssel ausgedrückt wird, zum Beispiel den Namen pk_primaerschluessel bekommen soll, dann lautet die Syntax: create table kunden2( Kunden_nr smallint not null constraint pk_primaerschluessel primary key, nachname varchar(20), vorname varchar(30)) Aufgabe: Erstellen Sie diese Tabelle kunden2 und lassen Sie die Daten der Tabelle Kunden hineinschreiben: insert into kunden2 select * from kunden Auch die vorher erstellte Tabelle Konten soll nun mit einem mit Namen versehenen constraint (der außerdem explizit als Fremdschlüssel benannt wird) erstellt werden: - 46 - Microsoft SQL-Server 2000 Anleitung create table konten2( Konto_nr smallint primary key, kunden_nr smallint not null constraint fk_fremdschluessel foreign key (kunden_nr)references kunden (kunden_nr), kontostand decimal(12,2)) Aufgabe: Erstellen Sie diese Tabelle konten2 und lassen Sie alle Daten der Tabelle konten hineinschreiben (insert into konten2 select * from konten). Aufgabe: Erstellen Sie noch ein Diagramm für die Beziehung zwischen kunden2 und konten2 Beim Erstellen der Beziehungslinie ist zu sehen, dass die Option Vorhandene Daten beim Erstellen überprüfen aktiviert ist. Das bedeutet, dass hier die Regeln der referentiellen Integrität überwacht werden. Aufgabe: Erstellen Sie in der Datenbank SQL noch die Tabellen Chef und Mitarbeiter . Dabei sollen folgende constraints herschen: es gibt keinen Mitarbeiter ohne Chef jeder Chef hat (mindestens) einen Mitarbeiter Der Chef muss eine eindeutige Nummer und in jedem Fall einen Namen haben der Mitarbeiter muss eine eindeutige Nummer und in jedem Fall einen Namen haben Nehmen Sie anschließend Daten auf: Chef Klaus Motz Peter Wichtig Mitarbeiter Petra Hampel - 47 - Microsoft SQL-Server 2000 Anleitung Josef Dull Fred Arglos Franz Kanics Hans Lompel Lösung: Erstellen der Tabelle Chef create table chef( chef_nr smallint not null constraint chef_nummer primary key, name varchar(20) constraint darf_nie_leer_sein not null, vorname varchar(20)) Die Tatsache, dass die chef_nr nicht leer sein darf und Primärschlüssel ist, bekommt den Constraint-Namen chef_nummer Die Tatsache, dass der Name nicht leer sein darf, bekommt den Constraint-Namen darf_nie_leer_sein Erstellen der Tabelle Mitarbeiter create table mitarbeiter( ma_nr smallint not null constraint ma_primaerschluessel primary key, name varchar(20) constraint darf_nie_leer_sein not null, vorname varchar(20), chef_nr smallint not null constraint fremdschluessel_zu_chef foreign key (chef_nr) references chef (chef_nr)) Constraint-Name ma_primaerschluessel dafür, dass die ma_nr nicht leer sein darf und Primärschlüssel ist. Constraint-Name fremdschluessel_zu_chef dafür, dass chef_nr in der Tabelle Mitarbeiter der Fremdschlüssel ist, der die referentielle Integrität herstellt. - 48 - Microsoft SQL-Server 2000 Anleitung 2 Daten unterschiedlicher Herkunft importieren und exportieren Nach der Methode, mit der in Kapitel 10 (ab S. 38) eine Excel-Datei importiert wurde, können über DTS (=Data Transformation Services) heterogene Daten im- und exportiert werden. Für fortgeschrittene Anwendungen ist es dabei möglich, DTS-„Pakete“ zur automatischen bzw. zeitgesteuerten Übertragung und Umwandlung von Daten zu erstellen. Der Daten Im- und Export ist sowohl zu und nach den anderen Microsoft-Programmen (Excel, Access, andere SQL-Server-Versionen) als auch über ODBC zu Datenbanken wie Oracle und DB2 (von IBM) oder auch MySQL möglich. Außerdem ist der Im- und Export zu reinen ASCII-Textdateien möglich, ein Vorgang, der vor allem auch im Zusammenhang mit Daten, die von Großrechnern stammen, wichtig ist. 2.1 Import und Export von Textdateien Aufgabe: Kopieren Sie zunächst die Datei order_details.csv vom Netz auf Ihre Festplatte. Es handelt sich dabei um eine 1,6 Millionen Datensätze große csv-Datei von 36 MB, mit der das Übertragen von Daten vom Großrechner simuliert werden soll. Die Daten liegen in dieser Form vor: Order ID ProductID Price Quantity Discount 110248 11 14.0000 12 0 10248 42 9.8000 10 0 10248 72 34.8000 5 0 10249 14 18.6000 9 0 10249 51 42.4000 40 0 10250 41 7.7000 10 0 Der besseren Lesbarkeit wegen sind die Semikolons als Trennzeichen hier durch Tabstopps ersetzt. Aufgabe: Erstellen Sie jetzt zunächst im Enterprise Manager eine neue Datenbank mit dem Namen Orders, in die diese Daten hinein kommen sollen. - 49 - Microsoft SQL-Server 2000 Anleitung Wählen Sie dann mit Rechtsklick auf Datenbanken Alle Tasks, Daten Importieren. Nach dem ersten WillkomenDialogfeld, bei dem Sie auf Weiter klicken, sehen Sie das Dialogfeld Datenquelle wählen Stellen Sie hier ein: Anschließend klicken Sie bitte auf Weiter. Im nächsten Dialogfeld werden Angaben zum Dateiformat gemacht: Anschließend klicken Sie bitte auf Weiter. Hier erfolgt jetzt nur die Angabe der Spaltentrennzeichen. Klicken Sie Semikolon an - 50 - Microsoft SQL-Server 2000 Anleitung Anschließend klicken Sie bitte auf Weiter. Jetzt wird als Ziel die Datenbank orders eingestellt. Anschließend klicken Sie bitte auf Weiter. Im nächsten Schritt wird die Tabelle (in Fall dieser csvDatei handelt es sich ja nur um eine einzige Tabelle) angezeigt. Klicken Sie bitte auf Weiter. - 51 - Microsoft SQL-Server 2000 Anleitung Hier entscheiden wir uns für Sofort ausführen Klicken Sie dann bitte auf Weiter. Jetzt folgt das Dialogfeld (Hier nicht abgebildet) zum Beenden des Assistenten. Klicken Sie auf die Schaltfläche Fertigstellen. Jetzt wird das „Paket“ ausgeführt. Aufgabe: Öffnen Sie jetzt die Tabelle order_details Sie sehen, dass die Feldnamen automatisch als Col001, Col002 usw. vergeben wurden. Außerdem ist der Datentyp überall automatisch Varchar (wie Sie an der Linksbündigkeit der Daten auch schon sehen können) - 52 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Vergeben Sie die folgenden Feldnamen und Datentypen: Aufgabe: Speichern Sie den Datenentwurf nach dem Ändern. Dabei wird eine Warnung erfolgen: Bestätigen Sie hier mit Ja. Wenn Sie dann die Tabelle öffnen, wird sie so auf dem Monitor sichtbar: 2.2 Access-Datenbank importieren Beim Importieren einer Access-Datenbank ist es wichtig, dass zwar die komplette Datenbank in den SQL Server importiert werden kann, dass man aber darauf achten muss, vorher eine leere Datenbank im SQL-Server zu erstellen. Sonst werden alle Datenbanken in die MasterDatenbank eingelesen. Aufgabe: Importieren Sie die Access-Datenbank Video.mdb . Erstellen Sie dafür zunächst die Datenbank Video im SQL Server. Als Datenquelle müssen Sie hier Access wählen. Die restlichen Schritte sind wie vorher beschrieben. Es wird zum Schluss eine Fehlermeldung stehen, die ihren Grund bei Umwandeln einer Tabelle hat. Diese kann trotzdem ignoriert werden. - 53 - Microsoft SQL-Server 2000 Anleitung 2.3 Textdatei exportieren Jetzt soll eine Tabelle aus der Bespiel-Datenbank Northwind, nämlich die Tabelle Products, als Texttabelle exportiert werden. Aufgabe: Verwenden Sie wieder den Import/Export-Assistent. Die Schritte sind Ihnen bekannt, beim Ziel müssen Sie den Typ und die Datei angeben: Bei dem Schritt, bei dem es um das Zieldateiformat geht, müssen Sie darauf achten, die richtige Tabelle abzugeben. Wenn Sie die exportierte Tabelle in Excel öffnen, müsste sie so aussehen: A B C ProductName SupplierID 1 ProductID 2 1 Chai 3 2 Chang 4 3 Aniseed Syrup 5 4 Chef Anton's Cajun Sea 6 5 Chef Anton's Gumbo M 7 6 Grandma's Boysenberry D CategoryID 1 1 1 2 2 3 1 1 2 2 2 2 E QuantityPerUnit 10 boxes x 20 bags 24 - 12 oz bottles 12 - 550 ml bottles 48 - 6 oz jars 36 boxes 12 - 8 oz jars F UnitPrice 18 19 10 22 21,35 25 G H I J UnitsInStock UnitsOnOrder ReorderLevel Discontinued 39 0 10 FALSCH 17 40 25 FALSCH 13 70 25 FALSCH 53 0 0 FALSCH 0 0 0 WAHR 120 0 25 FALSCH 2.4 Import und Export von Daten zu/von MySQL Für den Im- und Export von MySQL-Datenbanken ist es zunächst erforderlich, auf WindowsEbene den entsprechenden ODBC-Treiber zu installieren. Aufgabe: Kopieren Sie zu diesem Zweck zunächst die Datei MyODBC-3.51.06.exe Durch die Datei wird der von MySQL bereitgestellte Treiber installiert. Durch einen Doppelklick wird die Datei ausgeführt. Es ist nur nötig, einige Male Next und OK zu klicken, und zum Schluss die Schaltfläche Finish.- Dann ist der ODBC-Treiber - 54 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Wählen Sie dann die Start, Systemsteuerung, Verwaltung, Dienste, ODBCDatenquellen. Markieren Sie den MySQL ODBC-Treiber und wählen dann Konfigurieren. Mit den folgenden Angaben kann dann die Verbindung z. B. für die Datenbank Nordwind her-gestellt werden. Aufgabe: Starten Sie dann nach bewährter Methode den Umwandlungs-Assistenten. Auf eine Besonderheit in der Umwandlung muss aber noch hingewiesen werden: - 55 - Microsoft SQL-Server 2000 Anleitung Wenn Sie zum Schritt Ziel wählen gelangen, muss ein Datenquellenname (DNS) erstellt werden. Wählen Sie hier mit dem Listenpfeil bei Benutzer/System-DNS die vorher erstellte Nordwind-Verbindung Die restlichen Schritte sind bekannt. Im MySQL-Monitor können Sie dann die Datenbank sehen: Im PHPMyAdmin müsste die Datenbank ebenso sichtbar sein: - 56 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Jetzt soll umgekehrt eine MySQL-Datenbank importiert werden. Kopieren Sie zu diesem Zweck zuerst die kleine Beispieldatenbank Metallwaren (den Ordner Metallwaren) vom Public-Ordner in den Zielordner MySQL\Data. Die Datenbank Metallwaren muss nun auch im Enterprise Manager erstellt werden. An dem Punkt, wo Sie im Umwandlungs-Assistenten nach der Benutzer-System-DNS gefragt werden, muss eine neue erstellt werden, wenn nicht schon vorher (wie im ExportBeispiel) eine DNS erstellt wurde. In diesem Fall muss die Schaltfläche Neu verwendet werden. Wählen Sie dann auch: Mit diesen Einstellungen lässt sich dann die komplette Datenbank importieren. 2.5 Import von Daten auf eine Website Die SQL-Server-Datenbank verfügt auch über einen Assistenten, der es ermöglicht, Daten aus der Datenbank auf eine Website zu bringen. Das heißt, dass HTML-Code generiert wird, der zum Beispiel eine Tabelle der Datenbank als HTML-Tabelle erstellt, die auf einer Internet-Präsenz gezeigt werden kann. Hier Am Beispiel der vorher importieren Datenbank Metallwaren, Tabelle Artikel, soll dies gezeigt werden. Das Tool, mit dem dies möglich ist, ist im SQL Server – Enterprise Manager, ein bisschen versteckt: Hier soll aber betont werden, dass dies nur eine Methode für kleinere Projekte darstellen kann. Professioneller wird es mit PHP (wo auch Funktionen für die Anbindung des SQL Servers vorhanden sind) oder mit Microsofts ASP. Aufgabe: Wählen Sie den Befehl Extras Assistenten, dann Verwaltung, und dort SQL Server Web-Assistent. - 57 - Microsoft SQL-Server 2000 Anleitung Klicken Sie auf OK, wenn Sie den Assistenten gewählt haben. Im ersten Schritt des Web-Assistenten ist nur ein Willkommensgruß zu sehen: Klicken Sie bitte auf Weiter. Dann wird die Datenbank ausgewählt: Klicken Sie bitte auf Weiter. - 58 - Microsoft SQL-Server 2000 Anleitung Im nächsten Schritt bestimmen wir die Tabelle Artikel mit allen Spalten für die Website: Klicken Sie bitte auf Weiter. Im nächsten Schritt bestimmen wir, alle Zeilen der Tabelle auszuwählen. Möglich ist hier auch eine Abfrage. Danach wird nach einem Zeitplan gefragt: Klicken Sie bitte auf Weiter. Anschließend wird abgefragt, wo die HTML-Seite gespeichert werden soll. - 59 - Microsoft SQL-Server 2000 Anleitung Wir wählen eine etwas übersichtlichere Stelle: Jetzt folgen noch etliche Fragen zur Formatierung der Website, die hier nicht einzeln dargestellt werden sollen. Nach Abschluss dieser Prozedur sollte eine HTML-Seite als Ergebnis gezeigt werden können: Wenn Sie sich dazu den Quellcode ansehen, dann können Sie erkennen, dass es „reiner“ HTML-Code ist, der keine der früher bei Microsoft bekannten Aufblähungen enthält, die zum Beispiel von früheren Frontpage-Versionen bekann sind: <HTML> <HEAD> <META content="text/html; charset=utf-8" http-equiv=Content-Type> <TITLE>Microsoft SQL Server-Web-Assistent</TITLE> </HEAD> <BODY> <H3>Abfrageergebnis</H3> <HR> <PRE><TT>Zuletzt aktualisiert: 2004-05-23 19:46:36.420</TT></PRE> <P> <P><TABLE BORDER=1> <TR><TH ALIGN=LEFT>Artikel_ID</TH><TH ALIGN=LEFT>Artikel</TH><TH ALIGN=LEFT>VK_Preis</TH><TH ALIGN=LEFT>Lagerbestand</TH></TR> <TR><TD><TT>1</TT></TD><TD><TT>Schrauben</TT></TD><TD><TT>.20</TT></TD><TD> <TT>10000</TT></TD></TR> <TR><TD><TT>2</TT></TD><TD><TT>Nägel</TT></TD><TD><TT>.02</TT></TD><TD><TT> 2000</TT></TD></TR> <TR><TD><TT>3</TT></TD><TD><TT>Bolzen</TT></TD><TD><TT>.10</TT></TD><TD><TT >1500</TT></TD></TR> <TR><TD><TT>4</TT></TD><TD><TT>Nieten</TT></TD><TD><TT>.03</TT></TD><TD><TT >20000</TT></TD></TR> <TR><TD><TT>5</TT></TD><TD><TT>Dübel</TT></TD><TD><TT>.25</TT></TD><TD><TT> 800</TT></TD></TR> <TR><TD><TT>6</TT></TD><TD><TT>Klammern</TT></TD><TD><TT>.10</TT></TD><TD>< TT>10000</TT></TD></TR> </TABLE> <HR> </BODY> </HTML> - 60 -