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

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Zeile 18: Zeile 18:


CREATE TABLE haendler
CREATE TABLE haendler
  (hnr      INTEGER    NOT NULL,
(hnr      INTEGER    NOT NULL,
  name      VARCHAR(20) NOT NULL,
name      VARCHAR(20) NOT NULL,
  adresse  VARCHAR(20),
adresse  VARCHAR(20),


  CONSTRAINT pk_haendler
CONSTRAINT pk_haendler
    PRIMARY KEY (hnr),
  PRIMARY KEY (hnr),


  CONSTRAINT unique_name_address
CONSTRAINT unique_name_address
    UNIQUE (name, adresse)
  UNIQUE (name, adresse)
  );
);


CREATE TABLE ware
CREATE TABLE ware
  (wnr          INTEGER    NOT NULL,
(wnr          INTEGER    NOT NULL,
  typ          VARCHAR(20) NOT NULL DEFAULT 'Sonstiges',
typ          VARCHAR(20) NOT NULL DEFAULT 'Sonstiges',
  bezeichnung  VARCHAR(20) NOT NULL,
bezeichnung  VARCHAR(20) NOT NULL,


  CONSTRAINT pk_ware
CONSTRAINT pk_ware
    PRIMARY KEY (wnr),
  PRIMARY KEY (wnr),


  CONSTRAINT unique_typ_bezeichnung
CONSTRAINT unique_typ_bezeichnung
    UNIQUE (typ, bezeichnung)
  UNIQUE (typ, bezeichnung)
  );
);
                  
                  
CREATE TABLE liefert
CREATE TABLE liefert
  (hnr        INTEGER      NOT NULL,
(hnr        INTEGER      NOT NULL,
  wnr        INTEGER      NOT NULL,
wnr        INTEGER      NOT NULL,
  preis      NUMERIC(6,2)  NOT NULL,
preis      NUMERIC(6,2)  NOT NULL,
  lieferzeit  SMALLINT      CHECK (lieferzeit >= 0), /* Tage */
lieferzeit  SMALLINT      CHECK (lieferzeit >= 0), /* Tage */


  CONSTRAINT pk_liefert
CONSTRAINT pk_liefert
    PRIMARY KEY (hnr,wnr,preis),
  PRIMARY KEY (hnr,wnr,preis),


  CONSTRAINT fk_liefert_haendler
CONSTRAINT fk_liefert_haendler
    FOREIGN KEY (hnr) REFERENCES haendler (hnr),
  FOREIGN KEY (hnr) REFERENCES haendler (hnr),


  CONSTRAINT fk_liefert_ware
CONSTRAINT fk_liefert_ware
    FOREIGN KEY (wnr) REFERENCES ware (wnr)
  FOREIGN KEY (wnr) REFERENCES ware (wnr)
  );
);


/***********************************************************************
/***********************************************************************

Version vom 5. Januar 2010, 18:14 Uhr

Datenmodell (UML)

Medium:Haendler_1_Modell.jpg

Datenbankschema

Medium:Haendler_1_Schema.png

Datenbankschema (SQL)

DROP TABLE IF EXISTS liefert  CASCADE;
DROP TABLE IF EXISTS ware     CASCADE;
DROP TABLE IF EXISTS haendler CASCADE;

DROP TABLE IF EXISTS dummy    CASCADE;


CREATE TABLE haendler
(hnr       INTEGER     NOT NULL,
 name      VARCHAR(20) NOT NULL,
 adresse   VARCHAR(20),

 CONSTRAINT pk_haendler
   PRIMARY KEY (hnr),

 CONSTRAINT unique_name_address
   UNIQUE (name, adresse)
);

CREATE TABLE ware
(wnr          INTEGER     NOT NULL,
 typ          VARCHAR(20) NOT NULL DEFAULT 'Sonstiges',
 bezeichnung  VARCHAR(20) NOT NULL,

 CONSTRAINT pk_ware
   PRIMARY KEY (wnr),

 CONSTRAINT unique_typ_bezeichnung
   UNIQUE (typ, bezeichnung)
);
                
CREATE TABLE liefert
(hnr         INTEGER       NOT NULL,
 wnr         INTEGER       NOT NULL,
 preis       NUMERIC(6,2)  NOT NULL,
 lieferzeit  SMALLINT      CHECK (lieferzeit >= 0), /* Tage */

 CONSTRAINT pk_liefert
   PRIMARY KEY (hnr,wnr,preis),

 CONSTRAINT fk_liefert_haendler
   FOREIGN KEY (hnr) REFERENCES haendler (hnr),

 CONSTRAINT fk_liefert_ware
   FOREIGN KEY (wnr) REFERENCES ware (wnr)
);

/***********************************************************************
 * Dummy-Tabelle. Diese Tabelle kann für Abfragen eingesetzt 
 * werden, für deren Beantwortung eigentlich gar keine Tabelle
 * benötigt wird. Laut SQL-Standard muss immer eine Tabelle
 * in der FROM-Klausel einer SELECT-Anweisung angegeben werden.
 *
 * In PostgreSQL ist es auch möglich, Select-Anweisungen ohne 
 * From-Klausel anzugeben. Dies ist allerdings nicht standard-konform.
 ***********************************************************************/

CREATE TABLE dummy
(
 id INTEGER NOT NULL,
 CONSTRAINT p_dummy
   PRIMARY KEY (id)
);

Beispiels-Daten

INSERT INTO haendler(hnr, name, adresse)
VALUES 
  (1, 'Maier',   'Königsbrunn'),
  (2, 'Müller',  'Königsbrunn'),
  (3, 'Maier',   'Augsburg'),
  (4, 'Huber',   NULL),
  (5, 'Schmidt', 'Hamburg')
;

INSERT INTO ware(wnr, typ, bezeichnung)
VALUES
  (1, 'CPU',       'Pentium IV 3,8'),
  (2, 'CPU',       'Celeron 2,6'),
  (3, 'CPU',       'Athlon XP 3000+'),
  (4, 'Sonstiges', 'Eieruhr')
;

INSERT INTO liefert(hnr, wnr, preis, lieferzeit)
VALUES
  (1, 1, 200.00, 1),
  (1, 2, 100.00, NULL),
  (1, 3, 150.00, 7),
  (2, 3, 150.00, 4),
  (1, 4,  10.00, 1),
  (2, 1, 160.00, 1),
  (2, 2, 180.00, NULL),
  (3, 1, 160.00, 4),
  (3, 2, 190.00, 1),
  (4, 1, 150.00, 3),
  (4, 3, 180.00, 5),
  (4, 3, 199.99, 1)
;

/* Die Dummy-Tabelle enthält stets genau ein Tupel. */

INSERT INTO dummy(id)
VALUES (1);

Quellen


Dieser Artikel ist GlossarWiki-konform.