|
|
Zeile 1: |
Zeile 1: |
| {{Qualität
| | Es soll über drei Computer ein Audio bzw. Video Stream gesendet werden. Dabei soll ein Computer der Server, einer der DJ / Sender und einer der Hörer / Empfänger sein. Alle Rechner müssen dafür konfiguriert und mit den nötigen Programmen (z.B. [[SHOUTcast]], [[WinAmp]], NSVGUI7) installiert werden. |
| |correctness = 4
| |
| |extent = 5
| |
| |numberOfReferences = 5
| |
| |qualityOfReferences = 5
| |
| |conformance = 5
| |
| }}
| |
| Das Händler-liefert-Ware-Beispiel ist das klassische Beispiel, um viele Konzepte von [[Datenbanksystem]]en und [[SQL]] zu demonstieren.
| |
| Daher wird dieses Beispiel auch in der Vorlesung [[Kowarschick, W.: Multimedia-Datenbanksysteme|Multimedia-Datenbanksysteme]] verwendet.
| |
|
| |
|
| ==Datenmodell/[[ER-Diagramm]]==
| | Zusätzlich soll es für den DJ / Sender möglich sein eine Live-Ansage per Mikrofon zu senden. |
|
| |
|
| [[Datei:Haendler1_ER.png|gerahmt|ohne|Datenmodell in [[ER-Diagramm|ER]]-Notation]]
| | = Anmerkung = |
| | | Dieser Artikel wurde von [[FHAWiki:Glossar:Audio Streaming|FHAWiki Audio Streaming]] hierher verschoben. Die ursprüngliche Autorenliste kann dort eingesehen werden. |
| Ein Händler liefert bestimmte Waren.
| |
| Er kann durch die Händler-ID <code>h_id</code> eindeutig identifiziert werden und besitzt weitere Attribute, wie Name, Adresse etc.
| |
| Die zugehörigen [[Entity|Entities]] ([[Objekt]]e) werden durch den [[Entity-Typ]] (die [[Klasse (OOP)|Klasse]]) <code>haendler</code> definiert.
| |
| | |
| Welche Waren es gibt, ist durch einen weiteren Entity-Typ festgelegt: <code>ware</code>. Eine Ware ist durch die Waren-ID <code>w_id</code>
| |
| eindeutig festgelgt. Weitere Attribute, wie Typ (Gemüse, Fleisch, Wurst etc.) und genaue Bezeichnung (Kohlrabi, Rinderlende, Cervelat etc.),
| |
| beschreiben die jeweilige Ware näher.
| |
| | |
| Zwischen den Entity-Typen <code>haendler</code> und <code>ware</code> besteht eine Beziehung: <code>liefert</code>. Diese
| |
| legt fest, welcher Händler welche Ware zu welchen Konditionen liefert. Ein Lieferant liefert eine Ware normalerweise zu einem bestimmten
| |
| Preis. Zusätzlich kann eine gewisse Lieferzeit (in Tagen) angegeben werden. Es ist auch erlaubt, dass ein Händler ein und dieselbe
| |
| Ware zu mit unterschiedlichen Preisen unterschiedlich schnell liefert. Um dies zu ermöglichen, muss das Attribut <code>l_preis</code>
| |
| zum orginären Primärschlüssel <code>(h_id, w_id)</code> der Beziehung <code>liefert</code> hinzugefügt werden.
| |
| | |
| [[Datei:Haendler1_UML.png|gerahmt|ohne|Datenmodell in [[UML]]-Notation]]
| |
| | |
| ==Datenbankschema==
| |
| | |
| <source lang="sql">haendler: h_id, h_name, h_adresse* {PK: s_id}
| |
| {UNIQUE: h_name, h_adresse}
| |
| ware: w_id, w_typ, w_bezeichnung {PK: w_id}
| |
| | |
| {UNIQUE: w_typ, w_bezeichung}
| |
| liefert: h_id, w_id, l_preis, l_lieferzeit* {PK: s_id, w_id}
| |
| | |
| {FK: h_id -> haendler: h_id}
| |
| {FK: w_id -> ware: w_id}
| |
| {l_lieferzeit > 0}
| |
| </source>
| |
| | |
| Dieses Schema wurde nach dem in [[Kowarschick (MMDB-Skript)]] beschriebenen Verfahren aus dem obigen ER-Diargramm erzeugt.
| |
| | |
| ==Datenbankschema (SQL)==
| |
| | |
| Aus dem obigen Datenbankschema leitet sich folgende SQL-[[DDL]]-Befehle ab (Syntax getestet mit [[SQLite]] und [[PostgreSQL]]):
| |
| | |
| <source lang="sql">
| |
| /* Alte Tabellen (in der richtigen Reihenfolge) löschen: */
| |
| | |
| DROP TABLE IF EXISTS liefert;
| |
| DROP TABLE IF EXISTS ware;
| |
| DROP TABLE IF EXISTS haendler;
| |
| | |
| /* Tabellen erstellen */
| |
| | |
| CREATE TABLE haendler
| |
| (h_id INTEGER NOT NULL,
| |
| h_name VARCHAR(30) NOT NULL,
| |
| h_adresse VARCHAR(50),
| |
| | |
| CONSTRAINT pk_haendler
| |
| PRIMARY KEY (h_id),
| |
| | |
| CONSTRAINT unique_haendler_name_adresse
| |
| UNIQUE (h_name, h_adresse)
| |
| );
| |
| | |
| CREATE TABLE ware
| |
| (w_id INTEGER NOT NULL,
| |
| w_typ VARCHAR(30) NOT NULL DEFAULT 'Sonstiges',
| |
| w_bezeichnung VARCHAR(50) NOT NULL,
| |
| | |
| CONSTRAINT pk_ware
| |
| PRIMARY KEY (w_id),
| |
| | |
| CONSTRAINT unique_haendler_typ_bezeichnung
| |
| UNIQUE (w_typ, w_bezeichnung)
| |
| );
| |
|
| |
| CREATE TABLE liefert
| |
| (h_id INTEGER NOT NULL,
| |
| w_id INTEGER NOT NULL,
| |
| l_preis NUMERIC(8,2) NOT NULL,
| |
| l_lieferzeit SMALLINT, /* Tage */
| |
| | |
| CONSTRAINT pk_liefert
| |
| PRIMARY KEY (h_id, w_id, l_preis),
| |
| | |
| CONSTRAINT fk_liefert_haendler
| |
| FOREIGN KEY (h_id) REFERENCES haendler (h_id),
| |
| | |
| CONSTRAINT fk_liefert_ware
| |
| FOREIGN KEY (w_id) REFERENCES ware (w_id),
| |
| | |
| CONSTRAINT check_liefert_lieferzeit
| |
| CHECK (l_lieferzeit > 0)
| |
| );
| |
| </source>
| |
| | |
| ==Beispielsdaten==
| |
| | |
| <source lang="sql">
| |
| INSERT INTO haendler(h_id, h_name, h_adresse)
| |
| VALUES
| |
| (1, 'Maier', 'Königsbrunn'),
| |
| (2, 'Müller', 'Königsbrunn'),
| |
| (3, 'Maier', 'Augsburg'),
| |
| (4, 'Huber', NULL),
| |
| (5, 'Schmidt', 'Hamburg')
| |
| ;
| |
| | |
| INSERT INTO ware(w_id, w_typ, w_bezeichnung)
| |
| VALUES
| |
| (1, 'CPU', 'Pentium IV 3,8'),
| |
| (2, 'CPU', 'Celeron 2,6'),
| |
| (3, 'CPU', 'Athlon XP 3000+'),
| |
| (4, 'RAM', 'SDRAM 1GB'),
| |
| (5, 'Sonstiges', 'Eieruhr')
| |
| ;
| |
| | |
| INSERT INTO liefert(h_id, w_id, l_preis, l_lieferzeit)
| |
| VALUES
| |
| (1, 1, 200.00, 1),
| |
| (1, 1, 194.00, 6),
| |
| (1, 2, 100.00, NULL),
| |
| (1, 3, 150.00, 7),
| |
| (1, 4, 10.00, 1),
| |
| (1, 5, 5.00, 1),
| |
| (2, 1, 190.00, NULL),
| |
| (2, 3, 170.00, 4),
| |
| (2, 1, 160.00, 1),
| |
| (2, 2, 180.00, NULL),
| |
| (3, 1, 195.00, 2),
| |
| (3, 2, 190.00, 1),
| |
| (4, 1, 150.00, 3),
| |
| (4, 3, 180.00, 5),
| |
| (4, 3, 199.99, 1)
| |
| ;
| |
| </source>
| |
| | |
| ==SQL-Beispiele==
| |
| * [[Händler-Datenbank (SQL-Beispiel)/Identität|Identität]]
| |
| * [[Händler-Datenbank (SQL-Beispiel)/Projektion|Projektion]]
| |
| * [[Händler-Datenbank (SQL-Beispiel)/Selektion|Selektion]]
| |
| * [[Händler-Datenbank (SQL-Beispiel)/Join|Join]]
| |
| * [[Händler-Datenbank (SQL-Beispiel)/Unteranfragen|Unteranfragen]]
| |
| | |
| ==Quellen==
| |
| | |
| #{{Quelle|Kowarschick, W. (MMDB-Skript): Skriptum zur Vorlesung Multimedia-Datenbanksysteme}}
| |
| #{{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}
| |
| | |
| ==Siehe auch==
| |
| | |
| *{{Vgl|Händler2-Datenbank (SQL-Beispiel)}} (komplexere Version dieser Datenbank)
| |
| | |
| [[Kategorie:PostgreSQL-Beispiel]]
| |
| [[Kategorie:Praktikum:MMDB]]
| |