Relational data modeling for sub type
ch lerne das relationale Modell und die Datenmodellierun
Und ich habe einige Verwirrung in Bezug auf Untertypen.
ch weiß, dass die Datenmodellierung ein iterativer Prozess ist und es viele verschiedene Möglichkeiten gibt, Dinge zu modelliere
Aber ich weiß nicht, wie ich zwischen verschiedenen Optionen wählen soll.
ngenommen, wir wollen das @ modellier Partikel (Molekül, Atom, Proton, Neutron, Elektron, ...).
Lassen Sie uns der Einfachheit halber Quark und andere Partikel ignorieren.
Da sich alle Partikel desselben Typs gleich verhalten, werden wir die einzelnen Partikel nicht modellieren.
Anders ausgedrückt, wir werden nicht jedes Wasserstoffatom speichern.
Stattdessen speichern wir Wasserstoff, Sauerstoff und andere Atomtypen.
Was wir modellieren wollen, sind die Partikeltypen und die Beziehungen zwischen ihnen.
Ich benutze das Wort "Ar "sorglos.
Ein Wasserstoffatom ist eine Instanz. Wasserstoff ist eine Art. Wasserstoff ist auch eine Art Atom.
Ja, es handelt sich um eine Hierarchie von Typen. Und wir ignorieren die unterste Ebene (einzelne Partikel).
Ich kann mir verschiedene Ansätze vorstellen, um sie zu modellieren.
1. Eine Tabelle (Relation, Entität) für jede Art von Dingen (Partikeltypen). 1.1 Der erste Ansatz, der mir in den Sinn kommt.Proto (Proton)
Neutro (Neutron)
Elektro (Elektron)
Ato (Atom)
Atom_Proton (Atom, Proton, Menge)
Atom_Neutron (Atom, Neutron, Menge)
Atom_Electron (Atom, Elektron, Menge)
Molekü (Molekül)
Molecule_Atom (Molekül, Atom, Menge)
Ato (Atom, ProtonQuantity, NeutronQuantity, ElectronQuantity)
Molekü (Molekül)
Molecule_Atom (Molekül, Atom, Menge)
In diesem vereinfachten Modell, Fakten überProto sind verloren
2. Alle Dinge in einer Tabelle, wobei assoziative Tabellen die Beziehungen zwischen ihnen darstellen. 2.1 eine assoziative Tabelle für jede BeziehungPartike (Partikel
Atom_Proton (Partikel, Partikel, Protonenmenge)
Atom_Neutron (Partikel, Partikel, Neutronenmenge)
Atom_Electron (Partikel, Partikel, Elektronenmenge)
Molecule_Atom (Partikel, Partikel, Atommenge)
Partike (Partikel
ParticleComposition (Partikel, Partikel, Menge)
Diese Vereinfachung verliert nichts. Ich denke es ist besser
Aber wenn es Fakten gibt, die spezifisch für @ si Atom_Proton/ Atom_Neutron/ Atom_Electron, 2.1 kann besser sein.
Partike (Partikel
Atom_Proton (Partikel, Partikel, andere Attribute)
Atom_Neutron (Partikel, Partikel, andere Attribute)
Atom_Electron (Partikel, Partikel, andere Attribute) Molecule_Atom (Partikel, Partikel, andere Attribute)
ParticleComposition (Partikel, Partikel, Menge, andere Attribute)
ei diesem Ansatz gehen allgemeine Attribute zur Partikelzusammensetzung in @ ei ParticleComposition,
pezielle Attribute zur Partikelzusammensetzung werden in speziellen Tabellen aufgeführ
Partike (Partikel
Proto (Partikel, andere Attribute)
Neutro (Partikel, andere Attribute)
Elektro (Partikel, andere Attribute)
Ato (Partikel, andere Attribute)
Molekü (Partikel, andere Attribute)
Atom_Proton (Partikel, Partikel, Protonenmenge)
Atom_Neutron (Partikel, Partikel, Neutronenmenge)
Atom_Electron (Partikel, Partikel, Elektronenmenge)
Molecule_Atom (Partikel, Partikel, Atommenge)
Partike (Partikel
Ato (Partikel, Protonenmenge, Neutronenmenge, Elektronenmenge)
Molekü (Partikel, andere Attribute)
Molecule_Atom (Partikel, Partikel, Atommenge)
Es ist einfacher, aber Informationen überProto/Neutro/Elektro ist verloren wie in 1.2.
3.3 Wir können den Namen von @ ände Molecule_Atom, um es allgemeiner zu gestalten.Partike (Partikel
Ato (Partikel, Protonenmenge, Neutronenmenge, Elektronenmenge)
Molekü (Partikel, andere Attribute)
ParticleComposition (Partikel, Partikel, Menge)
Das sieht aus wie 2.2, mit zusätzlichen Tabellen für Untertypen Ato, Molekü).
Es scheint, 2.2 ist ein Sonderfall von 3.3.
Partike (Partikel
Proto (Partikel, andere Attribute)
Neutro (Partikel, andere Attribute)
Elektro (Partikel, andere Attribute)
Ato (Partikel, andere Attribute)
Molekü (Partikel, andere Attribute)
ParticleComposition (Partikel, Partikel, Menge, andere Attribute)
Atom_Proton (Partikel, Partikel, andere Attribute)
Atom_Neutron (Partikel, Partikel, andere Attribute)
Atom_Electron (Partikel, Partikel, andere Attribute)
Molecule_Atom (Partikel, Partikel, andere Attribute)
Es scheint, dass Atom_Proton, Atom_Neutron, Atom_Electron und Molecule_Atom kann man sich als @ vorstellsub types von ParticleComposition.
Dieser Ansatz ist der komplexeste, er enthält viele Tabellen, aber jede Tabelle hat ihre Rolle.
Frageerstößt eines der oben genannten Designs gegen die Regeln des relationalen ModellWelcher Ansatz ist der beste? Kommt es darauf an, wie wir über die Daten denken? Kommt es auf die Anforderungen an?Wenn es von den Anforderungen abhängt, sollten wir zuerst das einfachste Design auswählen und es dann allgemeiner gestalten, um neuen Anforderungen gerecht zu werden?
bwohl die resultierenden Datenmodelle viele Gemeinsamkeiten aufweisen, kann das ursprüngliche Design dasBenennun der Tabellen / Spalten und das domains der Schlüssel sind unterschiedlich.
Das Ändern von Schlüsseln hat möglicherweise größere Auswirkungen auf das System. Daher ist es möglicherweise nicht einfach, von einem einfachen Entwurf zu einem allgemeinen zu wechseln.
Was denkst du
PS: Dies ist möglicherweise kein geeignetes Beispiel, und die Lösungen sind möglicherweise problematisch, und es gibt möglicherweise weitere Variationen der Ansätze, aber Sie können den Punkt hoffentlich verstehen.
Wenn Sie bessere Designs haben, teilen Sie sie mir bitte mit.
m Anfang habe ich versucht, das @ zu modellier Partikel wei
Ich denke, es gibt untypisierende Beziehungen zwischen ihnen, und genau das suche ich.Sie sind von Menschen gut verstanden (?).s ist ein gutes Beispiel dafür, wie Menschen die Welt versteheHier ist das Bild in meinem Kopf.
Ich habe das nicht klar gesagt, weil ich nicht genau wusste, was ich modellieren wollte.
unächst dachte ich, Atom sei die Mutter von Proton / Neutron / Electron und Molecule die Mutter von Ato
Dann wurde mir klar, dass es um Komposition geht, nicht um Subtypisierung und nicht umTyphierarchie.
Ich habe eine Weile über Typen nachgedacht sowie über Gruppierung und Klassifizierung.
Hier ist ein Zitat von "SQL und relationale Theorie ":
So was ist ein Typ genau? Im Wesentlichen ist es eine benannte, endliche Menge von Werten ─ alle möglichen Werte einer bestimmten Art: zum Beispiel alle möglichen ganzen Zahlen oder alle möglichen Zeichenfolgen oder alle möglichen Lieferantennummern oder alle möglichen XML-Dokumente oder alle möglichen Beziehungen zu einer bestimmten Überschrift (und so weiter).
People prägte den Namen "Integer", um die Menge von Integer @ darzustelleWert.
atsächlich haben Menschen Konzepte und Namen geprägt, um Dinge zu identifizieren und zu gruppieren, damit wir die Welt verstehen / modellieren könne
Proton ist eine Menge von realen Protonen, Wasserstoff ist eine Menge von Wasserstoffatomen und so weiter.
In diesem Sinne bleiben die realen Teilchen amniedrigstes Leve der Typhierarchie.
Ich habe zuerst versucht, alle Partikel zu modellieren, aber dann war ich festgefahren, weil
So habe ich beschlossen, die realen Partikel zu ignorieren und stattdessen die Typen zu modellieren.
Wenn wir sagen, dass "ein Molekül aus Atomen besteht", bedeutet dies, dass "ein echtes H2O-Molekül aus zwei echten Wasserstoffatomen und einem Sauerstoffatom besteht", bedeutet dies auch, dass "ein beliebiges (Typ von) Molekül aus (einigen Typen von) besteht ) Atome ".
Anstatt alle Fakten über die realen Partikel anzugeben, können wir nur Fakten über die Partikeltypen angeben.
Das ist der Vorteil, den wir erhalten, wenn wir Dinge und geprägte Namen (Typen) gruppieren.
Die Hierarchie kann in Satzdefinitionen übersetzt werden.
Second Level - Typen über den realen Partikeln:
S_proton = { p | p satisfied the definition of a proton }
S_neutron = { n | n satisfied the definition of a neutron }
S_electron = { e | e satisfied the definition of an electron }
S_hydrogen = { h | h satisfied the definition of a hydrogen }
S_oxygen = { o | o satisfied the definition of an oxygen }
S_h2o = { w | w satisfied the definition of a h2o }
S_o2 = { o | o satisfied the definition of a o2 }
Höhere Stufe
Unter Verwendung der Terminologie der Mengenlehre ist Typ A ein Untertyp von B, wenn A eine Untergruppe von B ist.
Ich dachte zuerst, wir könnten den Atom-Typ wie folgt definieren:
S_atom = S_hydrogen union S_oxygen union ...
Die Mengen sind jedoch Relationen und die Elemente sind Tupel. Die Vereinigung funktioniert also nicht, wenn Tupel in den Relationen nicht kompatibel sind.
Die Ansätze, die Subtyp-Tabellen verwenden, lösen das Problem und modellieren die Subset-Beziehung.
Aber im Subtyping-Ansatz befindet sich Atom immer noch imzweites Leve.
Typen höherer Ebenen werden als Mengen von Mengen definiert.
S_atom = { S_hydrogen, S_oxygen, ... }
S_molecule = { S_h2o, S_o2, ... }
S_particle = { S_proton, S_neutron, S_electron, S_atom, S_molecule }
was bedeutet, dass Partikel die Art des Atoms ist und Atom die Art des Wasserstoffs.
uf diese Weise können die Beziehungen zwischen Partikeln auf einer hohen Ebene dargestellt werde
Das neue Datenmodell 4. Behandle Typen als eine Hierarchie von TypenIcleType (Partikeltyp, Name)
IcleTypeHierarchy (Partikeltyp, Elterntyp)
ParticleComposition (PartileType, SubParticleType, Quantity)
Beispieldaten
ParticleType | ParticleType | Name | |--------------+----------| | Particle | Particle | | Proton | Proton | | Neutron | Neutron | | Electron | Electron | | Atom | Atom | | Molecule | Molecule | | H | Hydrogen | | O | Oxygen | | H2O | Water | | O2 | Oxygen | ParticleTypeHierarchy | ParticleType | ParentType | |--------------+------------| | Proton | Particle | | Neutron | Particle | | Electron | Particle | | Atom | Particle | | Molecule | Particle | | Hydrogen | Atom | | Oxygen | Atom | | H2O | Molecule | | O2 | Molecule | ParticleComposition | PartileType | SubParticleType | Quantity | |-------------+-----------------+----------| | H | Proton | 1 | | H | Electron | 1 | | He | Proton | 2 | | He | Neutron | 2 | | He | Electron | 2 | | H2O | H | 2 | | H2O | H | 2 | | H2O | O | 1 | | CO2 | C | 1 | | CO2 | O | 2 |
Zum Vergleich sind dies die Beispieldaten für einen Subtyp-Tabellenansatz.
Particle | ParticleId | ParticleName | |------------+----------------| | H | Hydrogen | | He | Helium | | Li | Lithium | | Be | Beryllium | | H2O | Water | | O2 | Oxygen | | CO2 | Carbon Dioxide | Molecule | MoleculeId | some_attribute | |------------+----------------| | H2O | ... | | O2 | ... | | CO2 | ... | Atom | AtomId | ProtonQuantity | NeutronQuantity | ElectronQuantity | |--------+----------------+-----------------+------------------| | H | 1 | 0 | 1 | | He | 2 | 2 | 2 | | Li | 3 | 4 | 3 | | Be | 4 | 5 | 4 | ParticleComposition | ParticleId | ComponentId | Quantity | |------------+-------------+----------| | H2O | H | 2 | | H2O | O | 1 | | CO2 | C | 1 | | CO2 | O | 2 | | O2 | O | 2 |sub-atom
Diese Partikeltypen werden von Menschen definiert, und Menschen definieren ständig neue Konzepte, um neue Aspekte der Realität zu modellieren.
Wir können "Unteratom" definieren und die Hierarchie sieht folgendermaßen aus:
Approach 4 kann diese Änderung der Typhierarchie einfacher aufnehmen.
Update 2Die aufzunehmenden Faktens gibt verschiedene Arten von Teilchen auf der Welt: Protonen, Neutronen, Elektronen, Atome, MolekülAtome bestehen aus Protonen, Neutronen und Elektronen.oleküle bestehen aus Atome Es gibt viele verschiedene Arten von Atomen: Wasserstoff, Sauerstoff, .... Es gibt viele verschiedene Arten von Molekülen: H2O, O2, .... Ein Wasserstoffatom besteht aus einem Proton und einem Elektron. ... Ein H2O-Molekül besteht aus zwei Wasserstoffatomen und einem Sauerstoffatom. ...Verschiedene Partikeltypen können spezielle Eigenschaften haben, z. Ein Atom hat Atomgewicht usw. ...