In der Vergangenheit habe ich meine Datenbanktabellen immer mit einem graphischen Tool wie SQLiteMaestro erstellt. Nun habe ich begonnen mein Datenbankdesign mittels SQL zu erstellen, was ich irgendwie einfacher und schneller finde. Nun stosse ich aber direkt auf ein Problem, was mir nicht klar ist:
Interessanterweise wird in SQLiteMaestro der Eintrag in die Datenbank verweigert. In DBeaver sowie direkt mit sqlite3-Kommandozeile wird die Zeile in die Datenbank eingetragen, was m.E. nicht sein dürfte.
Code:
DROP TABLE IF EXISTS components;
DROP TABLE IF EXISTS fragility_groups;
DROP TABLE IF EXISTS fragility_group_component;
CREATE TABLE components (
component_id INTEGER NOT NULL,
component TEXT(15) NOT NULL,
description TEXT(255),
/* Primary Keys */
CONSTRAINT pk_components
PRIMARY KEY (component_id),
/* UNIQUE */
CONSTRAINT uq_component
UNIQUE (component)
);
CREATE TABLE fragility_groups (
fragility_group_id INTEGER NOT NULL,
fragility_group TEXT(50) NOT NULL,
description TEXT(255),
CONSTRAINT pk_fragility_groups PRIMARY KEY (fragility_group_id),
CONSTRAINT uq_fragility_group UNIQUE (fragility_group)
);
CREATE TABLE fragility_group_component (
component_id INTEGER NOT NULL,
fragility_group_id INTEGER NOT NULL,
/* Primary Keys */
CONSTRAINT pk_fragility_group_component
PRIMARY KEY (component_id, fragility_group_id),
/* Foreign Keys */
CONSTRAINT fk_fragility_group_component_component_id
FOREIGN KEY (component_id)
REFERENCES components(component_id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk_fragility_group_component_fragility_group_id
FOREIGN KEY (fragility_group_id)
REFERENCES fragility_groups(fragility_group_id)
ON UPDATE CASCADE
ON DELETE RESTRICT
);
INSERT INTO fragility_groups (fragility_group, description)
VALUES ( 'TH001', 'blabla'),
('TH002', 'abcd');
INSERT INTO components (component, description)
VALUES ('1TH10D001', 'Nachwärmeabfuhrpumpe 1TH10D001'),
('2TH20D001', 'Nachwärmeabfuhrpumpe 2TH20D001');
-- Das folgende sollte eine Fehlermeldung hervorrufen, da die beiden Werte nicht in den Tabellen vorhanden sind
INSERT INTO fragility_group_component (component_id, fragility_group_id) VALUES (100,99);
Interessanterweise wird in SQLiteMaestro der Eintrag in die Datenbank verweigert. In DBeaver sowie direkt mit sqlite3-Kommandozeile wird die Zeile in die Datenbank eingetragen, was m.E. nicht sein dürfte.