a x b x c x....n Matrizen in Datenbanken

TomTank

Mitglied
In einem konkreten Programm habe ich das folgende Problem:

In meinem konkreten Anwendung handelt es sich um ein Farbenhersteller. Also hier nochmal etwas konkreter Ausgedrückt: Chemie A + Chemie B + Chemie C + .... Chemie N = darf Chemie Y nicht enthalten sein. Wenn ich natürlich Chemie A abfrage mit Chemie B.... muss als Ergebnis Chemie Y geben. Gleiches gilt naütrlich auch für Chemie B, wenn zusammen C ... N darf nicht Chemie Y enthalten sein. Bzw. Chemie C etc. darf nicht Chemie Y enthalten sein.

Also:
Produkt a darf in Verbindung mit Produkt b, Produkt c, .... Produkt n nicht Produkt y auswählbar sein. Das Produkt mus bei Abfrage von Produkt b in Verbindung mit Produkt a, Produkt c, ... Produkt n das dieses nicht das Produkt y nicht enthalten sein darf.

Dieses soll am effizientesten auf eine Datenbank abgebildet werden (über dieses Problem bin ich jetzt schon etwas länger am knobeln, mir raucht im Augenblick schon der Kopf :))

Hoffe es ist nicht zu verwirrend :)

Mein bisheriger ERM - Diagramm sieht wie folgt aus

Tabelle Chemie {
int id;
string name;
}

Tabelle ChemieCombie {
Invalid_Chemie invalid_id;
Chemie chemie_id;
}

Tabelle Invalid_Chemie {
int id;
Chemie chemie_id;
Chemielist combis_id;
Chemie invalid_id;
}

Nach diesem Lösungsansatz müsste ich aber für alle Chemie Produkte die Liste führen, was sicherliche die Datenbank aufblähen würde. Außerdem müsste ich alle ändern wenn sich eine Kombi ändert, außerdem wäre das ermitteln auch nicht ganz einfach.

Wie kann so etwas am besten in einer Datenbank darstellen?
 
S

SlaterB

Gast
dein Beispiel ist schwer zu verstehen
> Chemie A + Chemie B + Chemie C + .... Chemie N = darf Chemie Y nicht enthalten sein.
ist für sich schon keine klare Aussage, dem Rest nach verstehe ich das so
'ist die Kombination von A-N in einem Endprodukt enthalten, ist Y verboten'

im weiteren wird es aber nicht gerade leichter
> Wenn ich natürlich Chemie A abfrage mit Chemie B.... muss als Ergebnis Chemie Y geben.
was ist das? klingt erst wie eine andere Regel
'ist die Kombination von A-? [wieder N] in einem Endprodukt enthalten, ist Y erlaubt, wenn nicht gar zwingend'
??
vielleicht meinst du aber 'wenn A-N abgefragt wird, muss das Verbot von Y aufgrund der vorherigen Regel geliefert werden',
ok, hoffen wir mal


es wird nicht leichter:
> Gleiches gilt naütrlich auch für Chemie B, wenn zusammen C ... N darf nicht Chemie Y enthalten sein.
wie, heißt das
'ist die Kombination von B-N in einem Endprodukt enthalten, ist Y verboten'
?
dann spielt A ja überhaupt keine Rolle, wieso vorher aufgenommen?


> Bzw. Chemie C etc. darf nicht Chemie Y enthalten sein.
macht es dann leider auch nicht verständlicher

------

was immer du vorhast, du musst die Information reproduzierbar in der DB abspeichern,
notfalls deinen gesamten Datenbestand von GBs als String in einem einzigen Attribut eines einzigen Eintrags einer einzigen Tabelle..

etwas strukturierter wäre sicherlich zu bevorzugen, die DB ist dabei aber nur begrenzt das Problem,
hauptsächlich musst du wissen was du haben willst,
da ich es nicht so genau weiß ist es jetzt schwierig,

Listen von Chemikalien klingen aber durchaus angebracht, das ist nicht falsch und auch keine Aufblähung,
bei 20 Elementen in einer Liste musst du natürlich kein kartesisches Produkt alles denkbaren Kombinationen ablegen,
sondern nur einen Eintrag, den ins Programm einlesen als die relevante Informationen und wenn überhaupt dann dort weiter aufblähen,
wahrscheinlich aber auch zu vermeiden

mit einfachen Tabellen + JDBC ist es etwas unhandlich, beliebig lange Listen darzustellen,
höhere Frameworks wie Hibernate würden zumindest die Java-Seite einfacher machen, allerdings auch sehr viel zu lernen zu Beginn..

in der DB wahrscheinlich eine Tabelle Chemie, eine Tabelle Kombi mit dem Invalid, richtig,
und dann eine Tabelle KombiEntry mit Link auf Kombi + Chemie,
in dieser Tabelle sind 20 Einträge, die auf dieselbe Kombi zeigen, für eine Liste von 20,
muss man später laden und zusammensuchen
(ok, hast du auch schon selber ;) )
 

TomTank

Mitglied
Dank dir erstmal.

Ich versuche es noch etwas besser zu beschreiben: ( Hierzu muss ich sagen ich bin Chemiker ;) )

Es gibt n unterschiedliche Chemikalien die jeder für sich in einem Datensatz gespeichert sind.
Jetzt dürfen bestimmte chemikalien nicht zusammen gemischt werden. (Aus meiner Laiensicht, weil eine Kombination dieser Chemikalien eine negative Reaktion hervorruft ).

Also ein einfaches Beispiel:

Chemikalie A darf nie mit Chemikale Y vermengt werden
Chemikalie B darf nie mit Chemikalie Y vermengt werden

Hieraus würde erstmal resultieren das ich zu der Tabelle "Chemikalie" über eine Beziehung in eine weitere Tabelle "InvalidChemikalie" die Chemikalien speichern würde die niemals zusammen gemixt werden dürfen.

In einer erweiterten Version wirds etwas komplexer:

Wenn Chemikalie A und Chemikalie B zusammengebracht wird darf >nie< Chemikalie Y
(z.B. aus Explosionsgefahr, wenn man so will der letzte Funke ;) ) zusammen gebracht werden.

Diese Combinationen können beliebig erweitert werden also z.B.

- Wenn Chemikalie A, B und C zusammengebracht wird darf >nie< Chemikalie Y zusammen
gebracht werden.
- Wenn Chemiklie A, B, C und D zusammengebracht wird darf >nie< Chemikalie Y hinzugefügt
werden.
- Wenn Chemikal A, B, C ... N zusammengebracht wird darf >nie< Chemikalie Y hinzugefügt
werden
- Wenn Chemikalie A, B, C ... N zusammengebracht wird darf >nie<
Chemikalie X oder Y oder ... oder Z verwendet werden.

Und ich bekomme es einfach nicht hin wie ich dieses am besten in eine Datenbank abbilden könnte.

Danke für eure Hilfe
 
S

SlaterB

Gast
wie sind die Regeln?
wenn A nicht mit Y zusammengebracht werden kann, gilt das dann für alle A, egal was sonst noch in den großen Kochtopf mit reinkommt,
genauso B usw?
denn so wie du das nun erzählt hast, klingt das weniger nach Kombinationen als nach Einzel-Ausschlüssen,

für diese Beispiele wären jeweils einzeln zu speichern 'A nicht Y', 'B nicht Y' usw.

viel mehr gibts da kaum zu sagen, speichern und wieder laden, inwiefern dazu Schwierigkeiten/ Varianten der Speicherung bestehen ist mir nicht ersichtlich,
speichere die Information so platt und billig wie möglich, dann hat es mit DB eh nix mehr zu tun,

wenn du alle Regeln wieder eingelesen hast und etwa auf einen/ viele aktuelle Kochtöpfe prüfen willst,
kann es mit richtigen Kombinationen durchaus knifflich werden, wird sich zeigen,

bei Einzelkombinationen 'A nicht Y', egal was außer A sonst noch verhanden ist, ist dagegen nicht viel dabei,
zur Prüfung nur nachschauen ob A und evtl. Y vorhanden ist, wer hätte das gedacht

------

- Wenn Chemikalie A, B, C ... N zusammengebracht wird darf >nie<
Chemikalie X oder Y oder ... oder Z verwendet werden.

das hier ist bisschen was anderes, mit der KombiEntry-Tabelle aber genauso zu erreichen,
dann eben das invalid nicht irgendwo fest als Attribut, sondern auch mit eigenen Eintrag hinzufügen,
die KombiEntry-Tabelle hat dann drei Attribute, eine Referenz auf die Kombination überhaupt, eine auf eine normale Chemie, eine auf eine Invalid-Chemie,
oder nur ein Link auf Chemie und boolean für normal/invalid,
im Hauptdatensatz der Kombination könnten weitere boolean, ob für die normalen bzw. invaliden eine UND oder eine ODER-Verknüpfung besteht usw.,

das muss nicht in schönster Form lesbar sein in der DB, es reicht wenn es eindeutig ist,
fürs Auslesen der Daten und Umwandeln in ein schönes Java-Objekt mit Listen hat man alle Zeit der Welt
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
O apache derby in eclipse für Datenbanken einbauen Datenbankprogrammierung 3
R Datenbanken erstellen Datenbankprogrammierung 3
I Hilfe zu Multidimensionalen Datenbanken Datenbankprogrammierung 1
D Java Datenbanken Datenbankprogrammierung 1
T Lagerprogramm mit Datenbanken Datenbankprogrammierung 21
K Verschiedene Datenbanken - Was sollte ich lernen? Datenbankprogrammierung 11
M SQLite Zwei Datenbanken synchronisieren Datenbankprogrammierung 8
M Feedback für neues Buch über "Java und Datenbanken" erwünscht Datenbankprogrammierung 8
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
M Hash in Bezug auf Datenbanken unklar Datenbankprogrammierung 3
M Datenbankschema in relationalen Datenbanken Datenbankprogrammierung 3
Ananaskirsche Verschlüsselung von Datenbanken Datenbankprogrammierung 1
T Datenbanken-PDF Datenbankprogrammierung 15
Y Derby/JavaDB Benutzung von eingebetteten Datenbanken Datenbankprogrammierung 4
G Datenbanken in Java Datenbankprogrammierung 9
K Zwei Datenbanken miteinander auf Unterschiede vergleichen Datenbankprogrammierung 2
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
B Datenbanken schützen vor Zugriff Datenbankprogrammierung 3
M Beziehungsfrage Datenbanken Datenbankprogrammierung 5
L Große Datenbanken - Designproblem Datenbankprogrammierung 3
E Zwischen Datenbanken wechseln Datenbankprogrammierung 13
L Synchronisieren von 2 Datenbanken Datenbankprogrammierung 2
P DatenBanken mit Netbeans erstellen Datenbankprogrammierung 17
K Grundfragen zu Datenbanken Datenbankprogrammierung 28
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
J Unterstützung für verschiedene Datenbanken Datenbankprogrammierung 2
T MySQL Auflistung aller Datenbanken??? Datenbankprogrammierung 9
J In viele verschiedene Datenbanken einfügen Datenbankprogrammierung 3
C MySQL Hibernate mit 2 Datenbanken Datenbankprogrammierung 12
V Hibernate mit 2 Datenbanken Datenbankprogrammierung 3
W MySQL Datenbanken auslesen Datenbankprogrammierung 3
M prinzipielle Frage zu Datenbanken und jars ... Datenbankprogrammierung 2
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
brainray Bei MySQL alle Datenbanken eines Servers abfragen Datenbankprogrammierung 3
R 1 Programm, 2 Datenbanken Datenbankprogrammierung 15
S Standard für Datenbanken Datenbankprogrammierung 3
R Datenbanken, Tabellen normalisieren. Datenbankprogrammierung 1
G Datenbanken abgleichen Datenbankprogrammierung 4
P Insert into mit zwei Datenbanken Datenbankprogrammierung 3
G Effektive Methode zum durchsuchen von SQL-Datenbanken Datenbankprogrammierung 7
M Datenbanken synchronisieren Datenbankprogrammierung 2
P Datenbanken auswahl, anforderungen Datenbankprogrammierung 29
K Daten in Datenbanken einfügen Datenbankprogrammierung 6
G H2: Erstellen von Datenbanken verhindern Datenbankprogrammierung 2
Y Datenbanken Datenbankprogrammierung 6
M Maximale Kapazität von Datenbanken Datenbankprogrammierung 2
S Objektorientierte Datenbanken Datenbankprogrammierung 4
F Zwischen Datenbanken wählen auf SQL-Server Datenbankprogrammierung 4
G Umlaut-Problem mit Firebird Datenbanken Datenbankprogrammierung 8
I Datenbanken mit MySQL einrichten Datenbankprogrammierung 11
G Step-by-Step Anleitung für Datenbanken Datenbankprogrammierung 3
N Abfrage über zwei Datenbanken Datenbankprogrammierung 9
M Treiber für mysql Datenbanken Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben