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.

Beispie

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).

Nähert sic

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)

1.2 Da es nur eine Art von Protonen / Neutronen / Elektronen gibt, können wir es vereinfachen.

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 Beziehung

Partike (Partikel

Atom_Proton (Partikel, Partikel, Protonenmenge)
Atom_Neutron (Partikel, Partikel, Neutronenmenge)
Atom_Electron (Partikel, Partikel, Elektronenmenge)
Molecule_Atom (Partikel, Partikel, Atommenge)

2.2 einzelne assoziative Tabelle

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.

2.3 kombinieren 2.1 und 2.2

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

3. Verwenden Sie Subtyp-Tabellen. 3.1 Eine Tabelle für den BasistypPartike und zusätzliche Tabellen für Untertypen Ato, Molekü, ...).

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)

3.2 Wir können auch das @ kombinier Atom_XXXQuantity Tabellen in Atom und entfernen Pronton/Neutro/Elektro.

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.

3.4 Wir können alle oben genannten Ansätze kombinieren und ein generisches Modell erhalten.

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.

Wenn wir eine Tabelle für jede Art von Dingen verwenden, können wir inkompatible Schlüssel für @ auswähleAto undMolekü, sowietomgewic zumAto undmolekülname zumMolekü.Wenn wir uns für den generischen Ansatz entscheiden, können wir einen gemeinsamen Schlüssel für alle Partikel auswählen.
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.

Update 1Was sind die zu modellierenden Daten?

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 verstehe

Hier 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.

Types

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

Ich konnte mir keinen geeigneten Schlüssel vorstellen, um jedes echte Teilchen zu identifizieren.Es gibt zu viele davon, um sie in einer Datenbank zu speichern.

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.

Partikel-Typ-Hierarchie als Sets

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 Typen

IcleType (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. ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage