Neu organisiert für neues Schuljahr
This commit is contained in:
137
11fi5/AWP/IT_Concept.sql
Normal file
137
11fi5/AWP/IT_Concept.sql
Normal file
@ -0,0 +1,137 @@
|
||||
drop database if exists IT_Concept;
|
||||
create database if not exists IT_Concept;
|
||||
use IT_Concept;
|
||||
|
||||
create table tblKunde(
|
||||
Kundennr int primary key
|
||||
-- mehr Attribute sind in der Aufgabe nicht genannt
|
||||
)engine=innodb;
|
||||
|
||||
create table tblStandort(
|
||||
StandortID int primary key,
|
||||
Etage varchar(10),
|
||||
Raum varchar(10)
|
||||
)engine=innodb;
|
||||
|
||||
create table tblGeraet(
|
||||
Geraetenr int(5) primary key,
|
||||
Einkaufspreis double(6,2),
|
||||
-- Wartungsvertrag und letzte Watung müssen nicht ausgelagert werden,
|
||||
-- da auf Dauer nur 1 Datum und 1 boolscher Wert erfasst wird.
|
||||
-- diese Werte sind direkt vom PK des Geräts abhängig.
|
||||
Wartungsvertrag bool, -- boolscher Wert heißt true oder false
|
||||
letzteWartung date,
|
||||
Lieferdatum date,
|
||||
-- Lieferdatum könnte auch in eigener Tabelle stehen,
|
||||
-- wenn man davon ausgeht, dass mehr Details zur Lieferung erfasst werden
|
||||
-- da im Formular nur das Datum steht, kann es auch bei Geraet erfasst werden
|
||||
Kunde int,
|
||||
Standort int,
|
||||
foreign key(Standort) references tblStandort(StandortID),
|
||||
foreign key(Kunde) references tblKunde(Kundennr)
|
||||
)engine=innodb;
|
||||
|
||||
|
||||
-- Beziehung Geraet - Zaehler braucht keine Zwischentabellen, da
|
||||
-- ein Zaehler einem Gerät zugeordnet ist
|
||||
-- ein Gerät genau einen Zähler hat
|
||||
-- eigene Zählertabelle ist erforderlich, da merhere DS mit Zählerständen
|
||||
-- zu erfassen sind.
|
||||
-- ob der FK in tbl Geraet oder tblTaehler erfasst wird ist egal
|
||||
create table tblZaehler(
|
||||
ZaehlerID int auto_increment primary key,
|
||||
Datum date,
|
||||
Zaehlerstand int,
|
||||
Geraet int(5),
|
||||
foreign key(Geraet) references tblGeraet(Geraetenr)
|
||||
)engine=innodb;
|
||||
|
||||
-- bei der Beziehung Zubehör kann man der Übersicht entnehmen, dass
|
||||
-- ein Gerät mehrere Zubehörteile hat (mehrere Zubehör-IDs im Formular)
|
||||
-- außerdem interpretiere ich mit logischem Menschenverstand, dass
|
||||
-- ein Zubehörteil vermutlich auch in merheren Geräten verwendet werden kann
|
||||
-- deshalb n:m, das mit Zwischentabelle aufgelöst werden muss
|
||||
-- da keine Anzahl im Formualr angegeben wird, gehe ich davon aus, dass
|
||||
-- jedes Zubehörteil genau einmal in einem Gerät verbaut wird
|
||||
|
||||
create table tblZubehoer(
|
||||
ZubehoerID varchar(20) primary key
|
||||
)engine=innodb;
|
||||
|
||||
create table tblGeraeteZubehoer(
|
||||
GeraetZubehoerID int auto_increment primary key,
|
||||
Zubehoer varchar(20),
|
||||
Geraet int(5),
|
||||
foreign key(Zubehoer) references tblZubehoer(ZubehoerId),
|
||||
foreign key(Geraet) references tblGeraet(Geraetenr)
|
||||
)engine=InnoDB;
|
||||
|
||||
-- ein Gerät verursacht verschiedene Kostenarten (Papier, Miete,...)
|
||||
-- eine Kostenart fällt für verschiedene Geräte an
|
||||
-- deshalb n:m-Beziehung, Zwischentabelle
|
||||
create table tblKostenart(
|
||||
KostenartID int auto_increment primary key,
|
||||
Kostenart varchar(50)
|
||||
)engine=innodb;
|
||||
|
||||
-- eine Kostenart kommt mehrfach in einem Gerät vor, deshalb reichen
|
||||
-- GeraeteID und KostenartID nicht als zusammengesetzter PK aus,
|
||||
-- da sonst Papier, Miete o-ä. nur einmalig als Kostenfaktor angesetzt werden könnte
|
||||
-- Lösung: eigener PK oder Datum zum PK hinzunehen.
|
||||
create table tblGeraeteKosten(
|
||||
Geraet int(5),
|
||||
Kostenart int,
|
||||
Datum date,
|
||||
Betrag double(7,2),
|
||||
Bemerkung varchar(50),
|
||||
primary key (Geraet, Kostenart, Datum),
|
||||
foreign key(geraet) references tblGeraet(Geraetenr),
|
||||
foreign key(Kostenart) references tblKostenart(KostenartID)
|
||||
)engine=innodb;
|
||||
|
||||
-- ein Gerät kann mehrere Störungen haben,
|
||||
-- eine Störung kann bei mehreren Geräten vorkommen
|
||||
-- deshalb n:m-Beziehung und Auflpösung mit Zwischentabelle
|
||||
create table tblStoerungsart(
|
||||
StoerungsartID int auto_increment primary key,
|
||||
Art varchar(50)
|
||||
)engine=innodb;
|
||||
|
||||
-- eine Kostenart kommt mehrfach in einem Gerät vor, deshalb reichen
|
||||
-- GeraetID und StoerungsartID nicht als zusamengesetzter PK
|
||||
-- Lösung: eigener PK oder Datum als drittes Element in PK dazu
|
||||
create table tblGeraeteStoerung(
|
||||
Geraet int(5),
|
||||
Stoerungsart int,
|
||||
Datum date,
|
||||
primary key(Geraet, Stoerungsart, Datum),
|
||||
foreign key(Geraet) references tblGeraet(Geraetenr),
|
||||
foreign key(Stoerungsart) references tblStoerungsart(StoerungsartID)
|
||||
)engine=INNODB;
|
||||
|
||||
-- Alter Statements
|
||||
-- Fügen Sie in Tabelle „Gerät“ ein weiteres Attribut „Gerätebeschreibung“ mit 100 Zeichen hinzu.
|
||||
Alter table tblGeraet
|
||||
add Geraetebeschreibung varchar(100);
|
||||
|
||||
-- 2.Ergänzen Sie an geeigneter Stelle ein Attribut „Bemerkung“, bei dem Sie Eintragungen bezüglich der konkreten Störung vornehmen können.
|
||||
Alter table tblGeraeteStoerung
|
||||
add Bemerkung varchar(100);
|
||||
|
||||
-- 3.Ändern Sie den Datentyp beim Attribut „Zählerstand“ von int auf double. (oder ggf. anders herum)
|
||||
Alter table tblZaehler
|
||||
modify Zaehlerstand double(13,0);
|
||||
|
||||
-- 4.Ergänzen Sie beim Gerät ein Attribut Bestelldatum.
|
||||
Alter table tblGeraet
|
||||
add Bestelldatum date;
|
||||
|
||||
-- 5.Ergänzen Sie an geeigneter Stelle ein Attribut „Störung behoben“, das nur die Werte true oder false halten kann.
|
||||
Alter table tblGeraeteStoerung
|
||||
add StoerungBehoben bool;
|
||||
-- wenn Attributname aus 2 Wörtern besteht muss er in SQL mit Unterstrich oder zusammen geschrieben werden
|
||||
-- ansonsten erkennt MySql die Begriffe zwei Eigenschaften und wirft einen Fehler
|
||||
|
||||
-- 6.Löschen Sie die Spalte Bemerkung bei Tabelle Kosten.
|
||||
Alter table tblGeraeteKosten
|
||||
drop Bemerkung;
|
||||
Reference in New Issue
Block a user