Händler-Datenbank (SQL-Beispiel): Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
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 &gt; 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]]

Version vom 23. April 2019, 10:28 Uhr

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.

Zusätzlich soll es für den DJ / Sender möglich sein eine Live-Ansage per Mikrofon zu senden.

Anmerkung

Dieser Artikel wurde von FHAWiki Audio Streaming hierher verschoben. Die ursprüngliche Autorenliste kann dort eingesehen werden.