communityWir suchen ständig neue Tutorials und Artikel! Habt ihr selbst schonmal einen Artikel verfasst und seid bereit dieses Wissen mit der Community zu teilen? Oder würdet ihr gerne einmal über ein Thema schreiben das euch besonders auf dem Herzen liegt? Dann habt ihr nun die Gelegenheit eure Arbeit zu veröffentlichen und den Ruhm dafür zu ernten. Schreibt uns einfach eine Nachricht mit dem Betreff „Community Articles“ und helft mit das Angebot an guten Artikeln zu vergrößern. Als Autor werdet ihr für den internen Bereich freigeschaltet und könnt dort eurer literarischen Ader freien Lauf lassen.

Datenbankanwendungen mit Microsoft SQL Server Compact - Datenbankentwurf Drucken E-Mail
Benutzerbewertung: / 143
SchwachPerfekt 
Samstag, den 12. September 2009 um 22:47 Uhr
Beitragsseiten
Datenbankanwendungen mit Microsoft SQL Server Compact
Datenbankentwurf
LINQ to SQL
Benutzeroberfläche
Alle Seiten

Datenbankentwurf

Eine Datenbank ohne Objekte ist nicht sehr nützlich, schließlich ist die wesentliche Aufgabe eines DBS, große Datenmengen effizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer und Anwendungsprogramme bereitzustellen. Der Datenbankentwurf ist der Prozess der Umsetzung einer "Mini-Welt" in ein Datenbankschema, welches dann in der Lage ist, diese Welt mit ihren Eigenschaften und Beziehungen zu simulieren.

ER-Modell

Um eine Datenbank zu entwerfen, bedient man sich häufig des Entity-Relationship-Modells (ER-Modell). Mit seiner Hilfe wird das Datenmodell entwickelt. Das ER-Modell geht dabei von Objekten des abzubildenden Relitätsausschnitts aus. Das Entity-Relationship-Modell (dt. Gegenstands-Beziehungs-Modell), dient dazu, im Rahmen der Datenmodellierung einen Ausschnitt der realen Welt zu beschreiben. Es besteht meistens aus einer Grafik und einer Beschreibung der darin verwendeten einzelnen Elemente.

Es dient zum einen in der konzeptionellen Phase der Anwendungsentwicklung der Verständigung zwischen Anwendern und Entwicklern, wobei ausschließlich das Was, also die Sachlogik, und nicht das Wie, also die Technik, wesentlich ist. Zum Anderen dient das ER-Modell in der Implementierungsphase als Grundlage für das Design der Datenbank. Ein ER-Modell besteht aus den Elementen Entity (Gegenstandstyp), Relationship (Beziehungstyp), Attribut (Eigenschaft), Schlüssel (Identifikation) und Rolle.

Wir beginnen deshalb diese Objekte zunächst zu benennen. Unsere Datenbankanwendung soll ein Shop (dt. Laden) werden. Ein Shop verfügt in aller Regel über Artikel. Diese Artikel haben einen Hersteller. Kunden können Artikel in Ihrem Shop bestellen. Aus diesen Informationen lässt sich nun das ER-Modell entwerfen.

shop_er_diagramm

Die blauen Elemente im ER-Diagramm, die Attribute, wurden entsprechend der Objekte sinnvoll gewählt. So besitzt ein Artikel eine Artikelnummer, eine Bezeichnung und einen Preis.

Relationales Datenmodell

Um mit den Inhalten einer Datenbank arbeiten zu können, müssen diese zuvor im Rahmen des Datenmodells beschrieben werden. Das Datenmodell legt folgende Informationen fest:

  • die Eigenschaften der Datenelemente
  • die Struktur der Datenelemente
  • die Abhängigkeiten von Datenelementen, die zu Konsistenzbedingungen führen
  • die Regeln zum Speichern, Auffinden, Ändern und Löschen von Datenelementen

In der Praxis wird das relationale Datenmodell zurzeit am häufigsten verwendet. Im relationalen Datenmodell wird die Beziehung der Sachverhalte durch das (mathematische) Konzept der Relationen dargestellt. Eine Relation besteht aus Attributen, die die Objekte mit einem Bezeichner und einem Wert beschreiben.

Die Menge aller Attribute wird als Tupel bezeichnet, das im Beispiel so aussehen kann:

t = [Name = 'Schmidt', Vorname = 'Hans', Ort = 'München']

Die Menge aller Tupel mit gleichen Attributen wird als Relation bezeichnet. Im relationalen Datenmodell werden zur Darstellung bzw. Behandlung ebenfalls Schlüssel benötigt. Über den Primärschlüssel werden Datensätze eindeutig identifiziert, Fremdschlüssel dienen zur Beschreibung der Beziehungen zwischen verschiedenen Relationen.

Optimierung des Datenmodells (Normalisierung)

Die Definierung des Datenmodells ist insbesondere bei komplexen Problemlösungen nicht einfach. Um die Erstellung des Datenmodells zu vereinfachen und Fehler z.B. in Form von Redundanzen zu vermeiden, wurden Regeln entwickelt, nach denen das Datenmodell effektiv erstellt werden kann. Diese Behandlung wird als Normalisierung bezeichnet. Die Normalisierung erfolgt dabei in mehreren Schritten.

Grundlage für die Normalisierung ist eine Tabelle bzw. das ER-Modell. Aus dem Entity-Relationship-Modell lässt sich die gewünschte Normalform erstellen. Die Details der Normierung sollen in diesem Artikel nicht weiter erörtert werden und können jedem guten Buch über Datenbanken entnommen werden.

Das Ergebnis der Normalisierung unseres ER-Modells ist die 3. Normalform mit den folgenden Tabellen:

Artikel
Artikelnr Bezeichnung Preis Herstellernr
       

Kunden
Kundennr Name Vorname PLZ Ort Strasse Hausnr
             

Hersteller
Herstellernr Name Telefonnr
     

Bestellungen
Bestellnr Kundennr Bestelldatum Status
       

Enthaelt
Id Bestellnr Artikelnr Menge
       

Mit der 3. Normalform ist der Datenbankentwurf in unserer trivialen Anwendung abgeschlossen. Nun kann mit der Implementierung der SQL CE Datenbank in Visual Studio begonnen werden.

Arbeiten mit Tabellen in Visual Studio

Während der Entwicklung müssen häufig neue Tabellen der Datenbank hinzugefügt, bestehende um neue Felder ergänzt oder Eigenschaften verändert werden. Wenn Sie mit SQL Server- oder SQL Server Compact-Datenbanken arbeiten, können Sie diese Aufgaben innerhalb der Entwicklungsumgebung über den Server-Explorer erledigen.

Bearbeiten von Tabellen über das Datenbankdiagramm

Wenn Sie viele Tabellen ändern oder Beziehungen zwischen Tabellen pflegen wollen, erledigen Sie das am einfachsten über ein Datenbankdiagramm. Leider unterstützt Visual Studio 2008 in Verbindung mit Microsoft SQL Server Compact keine Datenbankdiagramme. Diese werden in vollem Umfang nur von SQL Server-Datenbankdateien (.mdf) unterstützt. Sofern Sie auf SQL CE zurückgreifen, werden Sie beim erstmaligen Erstellen der Datenbankstruktur manuell vorgehen müssen und die Tabellen Schritt für Schritt erstellen. Wir werden später sehen, dass es eine Möglichkeit gibt ein Datenbankdiagramm auch für eine SQL CE-Datenbank erzeugen zu lassen.

server_explorerVisual Studio 2008 bietet einige Optionen bei der Bearbeitung von Tabellen in einer Microsoft SQL Server Compact-Datenbank an, die zwar nicht so vielfältig und optisch ansprechend sind, wie die Optionen in einem Datenbankdiagramm, die Arbeit dennoch sehr erleichtern. Neue Tabellen werden in SQL mit CREATE erstellt und mit ALTER werden Tabellendefinitionen verändert. Diese SQL-Befehle können direkt verwendet werden, um die Datenbankstruktur zu generieren. In Visual Studio 2008 stehen hierfür diverse Menüs zur Verfügung, die eine Bearbeitung über eine grafische Benutzeroberfläche ermöglichen.

Klicken Sie im Server-Explorer auf die SQL CE-Datenbankdatei und öffnen Sie mit der rechten Maustaste den Baum. Sie finden zwei Knoten, Tabellen und Replikation.

Erstellen Sie nun mit dem Menüpunkt Tabelle erstellen eine neue Tabelle. Es öffnet sich ein Dialogfenster mit verschiedenen Optionen. In der Zeile ganz oben kann der Name der Tabelle angegeben werden. Weiter unten findet sich eine Liste, die die Spalten der Tabelle repräsentiert.

Wir beginnen mit der Erstellung der ersten Tabelle, nämlich „Kunden“. Geben Sie dazu den Namen in die entsprechende Zeile ein. Kicken Sie nun mit einem Doppelklick in die Liste auf das erste freie Feld unter Spaltenname. Sie müssten nun einen Namen eingeben können. Die erste Spalte in der Tabelle „Kunden“ lautet Kundennr. Nach der Eingabe des Spaltennamens füllt Visual Studio für Sie automatisch die anderen Spalten in der Liste mit Standardwerten.

Jede Spalte in einer Tabelle hat einen bestimmten Typ, z.B. Integer oder String. Bei einer Spalte kann es sich um einen Primärschlüssel handeln. Im relationalen Datenmodell spielt die Verknüpfung von verschiedenen Tabellen eine entscheidende Rolle. Um Tabellen eindeutig verknüpfen zu können, muss allerdings jeder Datensatz einer Tabelle eindeutig identifiziert und adressiert werden können. Ein Attribut, das einen Datensatz mit allen seinen Feldwerten eindeutig identifiziert, wird als Primärschlüssel bezeichnet.

Ein Primärschlüssel darf nicht leer sein, so dass Visual Studio bei der Auswahl automatisch die Spalte »Null-Wert« auf „Nein“ setzt, sobald die Spalte als Primärschlüssel definiert wurde. Jede Tabelle darf nur genau einen Primärschlüssel haben und es dürfen keine Duplikate in den Datensätzen derselben Tabelle existieren.

Zeilenidentität und Primärschlüssel

Die Zeilenidentität für eine Tabelle wird durch die Vergabe eines Primärschlüssels für diese Tabelle eingeführt. Der Primärschlüssel besteht letztlich aus einer Aneinanderreihung von Spalten, die zusammengenommen eine Tabellenzeile als eindeutig kennzeichnen. Zum Beispiel könnte in einer Tabelle mit Personendaten die Kombination von Nachname und Vorname als Primärschlüssel definiert werden - vorausgesetzt, es gibt keine Personen mit gleichen Nach- und Vornamen.

Wählt man in Visual Studio 2008 eine Spalte aus und deklariert sie als Primärschlüssel, wird diese Spalte nicht unmittelbar zu einer Identitätsspalte.

Der Unterschied zwischen einem Primärschlüssel mit Identität und einem Primärschlüssel ohne Identität ist, dass bei einer Identitätsspalte die Funktion Auto-Increment aktiv ist und Sie die Spalte nicht selbst editieren können. Beim Einfügen von Datensätzen wird dieser Spalte automatisch ein eindeutiger Wert zugewiesen.

identitaetsspalteDie Wahl eines geeigneten Primärschlüssels für eine Tabelle ist eine wichtige Aufgabe beim Design einer Datenbank. Wesentlich ist vor allem, dass ein Primärschlüssel gefunden wird, dessen Spalten später nicht aktualisiert werden müssen. Eine solche Aktualisierung bringt stets große Probleme mit sich, wie Sie sich sicherlich am Beispiel mit den Personendaten ausmalen können.

In unserer Kundentabelle soll die Kundennummer einzigartig pro Kunde sein und so wählen wir für die Spalte eine Zahl aus, nämlich den Datentyp „int“. Es handelt sich bei der Spalte um einen eindeutigen Primärschlüssel. Weisen Sie unten für die Spalte der Identität True zu. Doppelklicken Sie nun auf die nächste freie Zeile und benennen Sie diese mit Name. Der Name ist vom Typ „nvarchar“ (engl. national character varying), maximal 100 Zeichen lang und darf nicht NULL sein. Dasselbe trifft auf die nächste Spalte der Tabelle „Kunden“ zu, nämlich Vorname. Die Spalte PLZ ist vom Typ „int“ und darf ebenfalls nicht NULL sein. Der Ort ist ein „nvarchar“ der Länge 100. Die Strasse ebenfalls. Die letzte Spalte trägt den Datentyp „smallint“ mit einer Länge von 2 Byte.

Nachdem Sie die erforderlichen Einstellungen getätigt haben, können Sie das Fenster mit OK schließen.

visual_studio_neue_tabelle

Sie werden nun im Server-Explorer die neue Tabelle „Kunden“ erblicken können. Erstellen Sie auf dieselbe Art und Weise die restlichen Tabellen „Artikel“, „Bestellungen“, „Hersteller“ und „Enthaelt“. Die unterstrichenen Spaltennamen in den gezeigten Tabellen stellen immer den Primärschlüssel dar. Wählen Sie für die Felder sinnvolle Datentypen aus und achten Sie darauf bei wichtigen Spalten NULL-Werte zu unterbinden. Sollten Sie Schwierigkeiten bei der Erstellung haben oder diesen Schritt überspringen wollen, können Sie die fertige Datenbank am Ende dieses Tutorials verwenden.

Fremdschlüssel und referenzielle Integrität

Microsoft SQL Server Compact ist nicht nur ein kompaktes, sondern auch ein relationales Datenbanksystem. Grundlage des Konzeptes relationaler Datenbanken ist die Relation, ein im mathematischen Sinn wohldefinierter Begriff. Die eigentliche Verknüpfung zwischen Relationen erfolgt über Werte, die als Fremdschlüssel bzw. Foreign Keys bezeichnet werden. Ein Fremdschlüssel ist ein Attribut, das sich auf einen Wert des Primärschlüssels einer anderen (oder gleichen) Relation bezieht.

Für die Beziehungen über Fremdschlüssel wird in der Regel gefordert, dass für einen Wert des Fremdschlüssels immer auch ein Wert in der Masterrelation besteht. Diese Forderung wird als referenzielle Integrität bezeichnet.

Fremdschlüssel lassen sich in Visual Studio im Dialogfenster Tabelleneigenschaften hinzufügen und verwalten. Klicken Sie dazu auf eine Tabelle und wählen sie den entsprechenden Menüpunkt aus. Die Tabelle „Artikel“ besitzt einen Fremdschlüssel, nämlich Herstellernr. Diese Spalte ist der Primärschlüssel der Tabelle „Hersteller“. Beide Tabellen stehen also in Beziehung zueinander und diese Beziehung gilt es zu kennzeichnen.

visual_studio_tabelleigenschaften

Die Fremdschlüssel sind in den dargestellten Tabellen kursiv dargestellt. Erstellen Sie mit dem oben demonstrierten Verfahren alle übrigen Verknüpfungen.

Verwenden eines DataSets als Datenquelle

DataSets erleichtern den Umgang mit Daten und so stellt Visual Studio ausgefeilte Methoden bereit, um ein DataSet aus einer bestehenden Datenbank zu generieren.

DataSet erstellen

Nachdem die Tabellenstruktur erfolgreich erstellt wurde und alle Beziehungen angegeben wurden, kann ein DataSet erstellt werden. Visual Studio bietet einen bequemen Weg ein Abbild der Datenbank in ein DataSet zu konvertieren. Klicken Sie dazu einfach im Server-Explorer auf eine Tabelle und ziehen Sie diese Tabelle in das zuvor geöffnete DataSet. Beginnen Sie mit der Tabelle „Kunden“.

shop_dataset

Visual Studio zeigt Ihnen nun auch die Fremdschlüsselbeziehungen zwischen den Tabellen in dem Diagramm an.

datenquellenWenn Sie sich jetzt das Projekt anschauen, können Sie an drei Stellen Änderungen feststellen, nämlich an dem Datenquellenfenster, der Anwendungskonfiguration und dem Projektmappen-Explorer.

Das Datenquellenfenster enthält jetzt ein neues typisiertes DataSet. Hier können Sie alle Tabellen des DataSets sehen und diese weiter bis auf die Spalten erweitern. Die Tabelle „Enthaelt“ ist zweimal vorhanden, nämlich einmal unterhalb der Tabelle „Artikel“ und einmal als eigenständige Tabelle des DataSets. Die Tabelle unterhalb von „Artikel“ enthält die relationale Beziehung zwischen diesen Tabellen, nämlich alle in einer Bestellung enthaltenen Artikel. Die Beziehung wurde innerhalb der Microsoft SQL Server Compact-Datenbank automatisch vom DataSet-Generator berücksichtigt.

Über den Projektmappen-Explorer können Sie Einstellungen öffnen. Wenn Sie dies tun, finden Sie die Einstellung für den ConnectionString. Alle Einstellungen werden im Projektverzeichnis als XML-Daten in der app.config gespeichert. Wenn Sie das Projekt kompilieren, werden die Einstellungen in eine Datei assemblyname.exe.config in das Zielverzeichnis übertragen. Sie können dann, ohne das Projekt neu kompilieren zu müssen, in dieser Datei die Einstellungen ändern. Diese werden dann beim nächsten Auslesen, z.B. beim Neustart der Anwendung, übernommen. Die XML-Datei ist nicht ganz so übersichtlich wie das Editieren innerhalb von Visual Studio, besonders dann, wenn noch mehrere Einstellungen hinzukommen, aber es ist zumindest möglich. Gerade bei ConnectionStrings ist das notwendig, da man innerhalb der Entwicklungsumgebung in der Regel mit einer anderen Datenbank arbeitet als später in der produktiven Anwendung.

Unter den Properties ist die Datei Settings.setting zu finden. Diese können Sie im Editor öffnen und diverse Einstellungen bei der Datenbankverbindung vornehmen. In der Dropdownliste können Sie einen Typ für die Einstellung auswählen. Die am häufigsten verwendeten Typen werden in der Dropdownliste aufgeführt, z. B. Zeichenfolge, (Verbindungszeichenfolge). Eine Verbindungszeichenfolge beschreibt den Standort einer Datenbank und die Zugangsweg zu dieser Datenbank.

Das vom Designer automatisch generierte DataSet ist ein exaktes Abbild des Datenbankschemas. Sobald Sie das Schema in der Datenbank ändern, müssen sie auch das DataSet entsprechend korrigieren.



Zuletzt aktualisiert am Freitag, den 14. Januar 2011 um 09:13 Uhr
 
AUSWAHLMENÜ