Hallo,
ich plane eine Datenbank mit unterschiedlichen Materialien und bin gerade dabei, mir ein Konzept auszudenken.
Die Datenbank hat unterschiedliche Parameter(Spalten), wie bspw. ID, Name, Dichte, Viskosität, usw.
Nun habe ich aber die Viskosität oftmals in Form einer Tabelle vorliegen in Abhängigkeit zweier Größen.
Ich kann/muss jetzt für jedes Material und jeden Parameter, der in Form einer Matrix vorliegt, eine neue Tabelle erstellen und diese irgendwie koppeln.
Oder kann man auch die Tabelle als Array in eine Zelle der Datenbank bringen und diese komplett auslesen?
Berechnen möchte ich innerhalb der Datenbank sowieso nichts.
Habt ihr da Ideen?
Hilfe bei Datenbankkonzept
Hängt im Zweifel von der genutzten Datenbank ab. Welche soll es denn werden? In Firebird könnte man Array-Spalten definieren. Aber Zitat aus der Doku:Patrick1990 hat geschrieben: ↑Freitag 19. Januar 2024, 15:32 Oder kann man auch die Tabelle als Array in eine Zelle der Datenbank bringen und diese komplett auslesen?
https://firebirdsql.org/file/documentat ... array.htmlTherefore, the general advice is: do not use arrays.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Danke für die Antwort.
Das ist ja lustig...man kann sie verwenden aber sollte nicht.
An sich dachte ich an SQLite, damit habe ich schon einmal ein kleines Projekt umgesetzt.
Gibt es sonst eine andere Möglichkeit, wie ich so eine Materialdatenbank aufbauen kann? Hast du eine Idee?
Das ist ja lustig...man kann sie verwenden aber sollte nicht.
An sich dachte ich an SQLite, damit habe ich schon einmal ein kleines Projekt umgesetzt.
Gibt es sonst eine andere Möglichkeit, wie ich so eine Materialdatenbank aufbauen kann? Hast du eine Idee?
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Man kann nicht viel antworten, bevor du uns sagst, von welchen Werten die Viskosität in deinem Modell genau abhängt. Material? Temperatur? Luftdruck? Sternenkonstellation?
In specifications, Murphy's Law supersedes Ohm's.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Die Viskosität ist nur ein Beispiel. Sie hängt von Temperatur und Druck ab.
Bei anderen Materialien sind aber wieder andere Tabellen/Matrizen hinterlegt. Es muss also alles flexibel sein.
Bei anderen Materialien sind aber wieder andere Tabellen/Matrizen hinterlegt. Es muss also alles flexibel sein.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Wenn man eine relationale Datenbank verwendet, dann tut man das üblicherweise, weil man die relationalen Eigenschaften auch nutzen will, nämlich indem man per select-Statement und Joins Daten abfrägt, wobei sich die Datenbank darum kümmert, dass das richtig herausgesucht wird. Wen du also Abfragen machen willst wie: "Zeig mir alle Materialien an, deren Viskosität bei einer Temperatur von ... und einem Druck von ... im Bereich von ... bis ... liegt". Oder: "Zeig mir für das Material ... an, welche Viskositäten es im Temperaturbereich ... bis ... bei einem Druck von ... hat". Dazu muss es aber eine Tabelle geben, in der der relationale[*] Zusammenhang von Material, Temperatur, Druck und Viskosität drinsteht. Das als Array (oder als Komma-getrennten String *schauder*) zu speichern, würde komplett dem relationalen Ansatz widersprechen.
[*]Relational heißt, dass es eine logische Relation zB. zwischen Material, Temperatur, Druck und Viskosität gibt. Relation ist einfach ein anderes Wort für Tabelle. Damit man Daten nicht redundant speichern muss, was im Lauf der Zeit zu Inkonsistenzen führen könnte, vergibt man für die Material-Tabelle einen Primärschlüssel, also einen Schlüssel, der jede Zeile innerhalb der Tabelle eindeutig identifizierbar macht, und referenziert diesen dann in einer anderen Tabelle (zB. die, in der der Zusammenhang mit der Viskosität festgelegt wird). Diese Referenz nennt man dann einen Fremdschlüssel. Relationale Datenbanken haben das eingebaut, dass man Primär- und Fremdschlüssel festlegen kann, und die Datenbank kümmert sich dann darum, dass man keinen Fremdschlüssel eintragen kann, zu dem es keinen korrespondierenden Primärschlüssel in der referenzierten Tabelle gibt. Die Datenbank kümmert sich dann auch darum, dass über den Fremdschlüssel abhängige Zeilen gelöscht werden, wenn die Zeile mit dem Primärschlüssel gelöscht wird, oder dass man letzteren nicht löschen kann, sofern es noch abhängige Zeilen mir entsprechendem Fremdschlüssel gibt. Das kann man für jede Tabelle festlegen.
In specifications, Murphy's Law supersedes Ohm's.
Man erzeugt nicht eine Tabelle pro Material, Tabellen sind statisch. Statt dessen gibt es eine Tabelle mit Materialien und eine mit Viskositätswerten, wobei in der Viskositätstabelle Werte für alle Materialien stehen und jeder Wert hat neben Temperatur und Druck auch die ID zum Material gespeichert.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Die Temperatur und Druck-Werte sind jedoch nicht für alle Materialien gleich. Dann bräuchte ich nahezu für jedes Material eine extra Tabelle mit den Viskositätswerten, und viele weitere Tabellen mit Werten für dieses Material. Macht das dann noch Sinn?
Ich habe vorhin etwas von json-Datenbanken gelesen. Würde sowas nicht mehr Sinn ergeben? Müsste mich jedoch dazu erstmal noch genauer belesen.
Ich habe vorhin etwas von json-Datenbanken gelesen. Würde sowas nicht mehr Sinn ergeben? Müsste mich jedoch dazu erstmal noch genauer belesen.
Ja, "alles ganz flexibel" will man natürlich gerne
![Smile :)](./images/smilies/icon_smile.gif)
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Ich bin da nun noch nicht schlauer geworden.
So wie ich es verstehe, gebe ich dem Material bspw. eine Material ID und kann bspw. andere Tabelleneinträge(Zeilen) mit dieser ID verknüpfen.
Wie wende ich das aber nun auf meine Gegebenheiten an?
nezzcarth hat geschrieben: ↑Samstag 20. Januar 2024, 21:17Ja, "alles ganz flexibel" will man natürlich gerneAber auf dem Abstraktionsniveau, auf dem du bisher bleibst, ist das, finde ich, nur ein schwammiger Allgemeinplatz und du wirst vmtl. nicht wirklich voran kommen. M.M.n. ist ein wichtiger Schritt beim Datenbank-Entwurf, dass man sich eben hinsetzt und z.B. überlegt, was für Daten man hat, wie die strukturiert sind, welche internen Beziehungen untereinander bestehen, welche Abfragen man darauf durchführen möchte usw. – ganz konkret. Jedenfalls kann man danach dann kann man anfangen, zu überlegen, wie man das modelliert. Wenn es denn unbedingt relational sein soll, wurden ja schon gute Hinweise hier in anderen Posts gegeben, wie man das angehen kann. Oder man kann, wie du in deinem letzten Schritt angedeutet hast, noch mal einen Schritt zurückgehen auch über andere Datenbankkonzepte nachdenken; das kann aber ggf. für den Anfang etwas zu viel sein. Natürlich kann ein solches Design auch flexibel im Rahmen des Erwartbaren sein, aber wenn man alles ganz offen und unspezifisch hält, kommt halt wahrscheinlich nichts dabei raus, mit dem man gut und effizient arbeiten kann.
Danke, ich bin bzgl. des Datenbankkonzepts sehr offen und hole mir auch deshalb Hilfe ein, weil ich eben noch gar keine Ahnung habe, was hier Sinn machen würde. Es muss also nicht unbedingt relational sein. Bisher kannte ich ehrlich gesagt nur diese SQL Datenbanken.
Hatte ich nicht geschrieben, dass du nicht für jedes Material eine eigene Tabelle sollst?Patrick1990 hat geschrieben: ↑Samstag 20. Januar 2024, 20:38 Die Temperatur und Druck-Werte sind jedoch nicht für alle Materialien gleich. Dann bräuchte ich nahezu für jedes Material eine extra Tabelle mit den Viskositätswerten, und viele weitere Tabellen mit Werten für dieses Material. Macht das dann noch Sinn?
Ein Eintrag in der Viskositätstabelle besteht aus: material_id, temperatur, Druck, viskosität.
Von diesen Einträgen gibt es eben dann ziemlich viele. Das ist der Datenbank aber im Normalfall ziemlich schnurz. Die kann damit umgehen.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Ok jetzt hab ichs verstanden...Das wird dann in der Tat mächtig groß.
Aktuell ist es so, dass diese Werte als Input für eine Interpolation dienen. Ich müsste dann also die relevanten Zeilen der Tabelle (ca. 300 pro Datensatz eines Materials) auslesen und dann verarbeiten. Ist das dennoch ok?
Aktuell ist es so, dass diese Werte als Input für eine Interpolation dienen. Ich müsste dann also die relevanten Zeilen der Tabelle (ca. 300 pro Datensatz eines Materials) auslesen und dann verarbeiten. Ist das dennoch ok?
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Also wäre eine SQL noch besser als eine noSQL Datenbank?
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Ok vielen Dank, dann spiele ich mal etwas rum.