Sie sind auf Seite 1von 4

Datenbank

Stoffe
Beziehungen
1.1 Beziehung
Der Fremdschlssel ist selbst Primrschlssel in seiner Tabelle. So wird garantiert,
dass hchstens eine Zeile der Tabelle den entsprechenden Wert annimmt. (1 :0/1
Beziehung).
z.B. bei einem Stoff: Stoffnr. ist PK der Tabelle Stoffe. In der Tabelle Gase ist
Stoffnr gleichzeitig PK und FK (referenziert Stoffe.Stoffnr). Damit ist ein Stoff
entweder ein Gas(Liquid) oder nicht. Mgliches Problem: Stoff ist Gas(Liquid) und
Staub zugleich. Abhilfe kann wohl nur durch Programmlogik erfolgen ist ein
Stoff bereits ein Gas(Liquid), so kann derselbe Stoff nicht noch einmal Staub
werden. Eigentlich msste der Stoffname eindeutig und einzigartig sein, damit
nicht zweimal derselbe Stoff in die Datenbank eingespeist wird. Evtl. Unique
Constraint oder PK?

1 n Beziehung
Beide Tabellen erhalten einen PK. Der FK der zweiten Tabelle ist jedoch nicht PK
der ersten Tabelle. Bsp: Stoffe hat PK Stoffnr. Synonyme hat den PK SynonymID
und zustzlich eine Spalte Stoffnr, in dem Stoffnr FK zu Stoffe ist. Damit kann
eine Stoffnr mehrere SynonymIDs bekommen.

SQLite Tabellen
Tabellen entsprechend ERD
CREATE TABLE Substances (SubstId INTEGER PRIMARY KEY,
Name TEXT NOT NULL,
CASNr TEXT,
Formula TEXT,
ExGroup TEXT,
MolarMass REAL,
LELkgm3 REAL,
UELkgm3 REAL,
Miscellaneous TEXT,
UserDefined INTEGER);

CREATE TABLE Dusts (Id INTEGER PRIMARY KEY,


T_CL REAL,
T_5MM REAL,
MinIgnitionEnergy REAL,
GrainSize REAL,
ElectricalResistivity REAL,
FOREIGN KEY(Id) REFERENCES Substances(SubstId)
);

CREATE TABLE GasesAndLiquids (Id INTEGER PRIMARY KEY,


LELvol REAL,
UELvol REAL,
MeltingPoint REAL,
BoilingPoint REAL,
Concentration REAL,
IgnTemp Real,
FOREIGN KEY(Id) REFERENCES Substances(SubstId)
);
CREATE TABLE Flashpoints (Id INTEGER PRIMARY KEY,
Flashpoint REAL,
Standard TEXT,
GasesAndLiquidsId Integer,
FOREIGN KEY(GasesAndLiquidsId) REFERENCES GasesAndLiquids(Id)
);
CREATE TABLE SteamPressures (Id INTEGER PRIMARY KEY,
Pressure REAL,
Temp REAL,
GasesAndLiquidsId Integer,
FOREIGN KEY(GasesAndLiquidsId) REFERENCES GasesAndLiquids(Id)
);
CREATE TABLE Synonyms (Id INTEGER PRIMARY KEY,
Synonym Text,
Manufacturer Text,
SubstId Integer,
FOREIGN KEY(SubstId) REFERENCES Substances(SubstId)
);
Update fr neue Spalte SubstClass:
ALTER TABLE Substances ADD COLUMN SubstClass text;

SQLite Tabellen Testdatenstze


Hier exemplarisch fr Wasserstoff.

Zuerst wird der Stoff in die Tabelle Substances eingetragen. Dabei entsteht der
Primrschlssel durch Autoincrement.
INSERT INTO Substances (Name, CASNr, Formula, ExGroup,
MolarMass, UserDefined)
VALUES ('Wasserstoff', '1333-74-0', 'H2', 'IIC',2,0);
Anschlieend werden die gas- (& flssigkeits-)spezifischen Parameter in die
Tabelle GasesAndLiquids eingetragen. Als Primrschlssel muss jetzt derselbe
Wert wie in der Tabelle Substances angegeben werden, um die 1:1 Beziehung
nicht zu stren. Dies kann durch die SQLite Funktion last_insert_rowid()
erfolgen.
INSERT INTO GasesAndLiquids (Id, LELvol, UELvol, MeltingPoint,
BoilingPoint, Concentration, IgnTemp)
VALUES (last_insert_rowid(), 4, 75, -259, -253, 0.0899, 560);
Handelt es sich um einen Staub (bspw. Mehl), wird der Stoff zunchst auch in die
Tabelle Substances eingetragen. Anschlieend werden quivalent zu einem
Gas(Liquid) die staubspezifischen Parameter in die Tabelle Dusts eingetragen.
INSERT INTO Dusts (Id, T_CL, T_5MM, MinIgnitionEnergy,
GrainSize, ElectricalResistivity)
VALUES (last_insert_rowid(), '460.0', '330.0', '100.0', '45.0',
'0.0');

Aktualisieren von Substanzen


Exemplarisch fr Wasserstoff.
Werden Substanzen (Objekte/ Instanzen) in der Anwendung gendert, so sind
verschiedene SQL-Statements ntig, um die entsprechenden Werte ebenfalls in
der DB zu aktualisieren. Zunchst werden die Substanz-Attribute aktualisiert.
Hierbei werden die bisherigen Werte in der DB mit allen eingegebenen
berschrieben (keine Aktualisierung von Einzelwerten, sondern immer eine
berschreibung von der gesamten Substanz). Die Primrschlssel der Tabellen
Substances, Synonyms, SteamPressures, Flashpoints werden beim ffnen des
Bearbeitungsdialogs in das aktuelle Substance-Objekt geladen und sind somit
beim DB-Update bekannt.
UPDATE Substances
SET Name = 'Wasserstoff', CasNr = '1333-74-0', Formula = 'H2',
ExGroup = 'IIC', MolarMass = '0.002', LELkgm3 = '0.0', UELkgm3 =
'0.0', Miscellaneous = 'Stand 09.01.2014'
WHERE SubstId = 7;
Da es sich bei Wasserstoff um ein Gas(Liquid) handelt, werden nachfolgend die
gas- (flssigkeits-) spezifischen Parameter aktualisiert. (quivalent dazu werden

auch staubspezifische Parameter aktualisiert, wenn es sich bei der zu genderten


Substanz um einen Staub handelt)
UPDATE GasesAndLiquids
SET LELvol = '4.0', UELvol = '75.0', MeltingPoint = '-259.0',
BoilingPoint = '-253.0', Concentration = '0.0889', IgnTemp =
'560.0'
WHERE Id = 7;
Anschlieend werden die zustzlichen Eigenschaften der Substanz aktualisiert.
Bei einem Gas(Liquid) sind dies Synonyme, Dampfdrcke und Flammpunkte, bei
einem Staub nur Synonyme. Jedes Item der zustzlichen Eigenschaften wird
entweder aktualisiert, hinzugefgt oder gelscht. Demzufolge gibt es auch drei
unterschiedliche SQL-Statement-Typen. Im Folgenden werden diese am Beispiel
der Synonyme gezeigt. Die Zuordnung des einzelnen Synonyms (Dampfdruck,
Flammpunkt) erfolgt ber eine unique ID (die per autoincrement vergeben wird)
in der Synonyms-Tabelle.
1. Fall: ndern eines Synonyms mit bestehender ID
UPDATE Synonyms
SET Synonym = 'Gasart 318 Wasserstoff 3.0', Manufacturer =
'Linde'
WHERE Id = 1;
2. Fall: Hinzufgen eines Synonyms einer noch nicht bestehenden ID
INSERT INTO Synonyms (Synonym, Manufacturer, SubstId)
VALUES ('Synonym X', 'Anbieter Y', 7);
3. Fall: Lschen eines Synonyms mit bestehender ID
DELETE FROM Synonyms
WHERE Id = 2;