Modelado de datos relacionales para subtipos

Estoy aprendiendo el modelo relacional y el modelado de datos.
Y tengo algo de confusión en mi mente con respecto a los subtipos.

Sé que el modelado de datos es un proceso iterativo y hay muchas formas diferentes de modelar cosas.
Pero no sé cómo elegir entre diferentes opciones.

Ejemplo

Supongamos que queremos modelar elpartículas (molécula, átomo, protón, neutrón, electrón, ...).
Ignoremos Quark y otras partículas por simplicidad.

Como todas las partículas del mismo tipo se comportan de la misma manera, no vamos a modelar las partículas individuales.
Dicho de otra manera, no vamos a almacenar todos los átomos de hidrógeno.
En su lugar, almacenaremos hidrógeno, oxígeno y otros tipos de átomos.
Lo que vamos a modelar es en realidad tipos de partículas y relaciones entre ellos.

Estoy usando la palabra "tipo" descuidadamente.
Un átomo de hidrógeno es una instancia. El hidrógeno es un tipo. El hidrógeno también es un tipo de átomo.
Sí, hay una jerarquía de tipos involucrados. Y estamos ignorando el nivel más bajo (partículas individuales).

Enfoques

Puedo pensar en varios enfoques para modelarlos.

1. Una tabla (relación, entidad) para cada tipo de cosas (tipos de partículas).1.1 El primer enfoque que viene a mi mente.

Protón (Protón)
Neutrón (Neutrón)
Electrón (Electrón)

Átomo (Átomo)
Atom_Proton (Átomo, protón, cantidad)
Atom_Neutron (Átomo, neutrón, cantidad)
Atom_Electron (Átomo, electrón, cantidad)

Molécula (Molécula)
Molécula_Atom (Molécula, átomo, cantidad)

1.2 Dado que solo hay un tipo de protón / neutrón / electrón, podemos simplificarlo.

Átomo (Átomo, Cantidad de protones, Cantidad de neutrones, Cantidad de electrones)
Molécula (Molécula)
Molécula_Atom (Molécula, átomo, cantidad)

En este modelo simplificado, hechos sobreProtón Esta perdido.

2. Todas las cosas en una tabla, con tablas asociativas que representan las relaciones entre ellas.2.1 una tabla asociativa para cada relación

Partícula (Partícula)

Atom_Proton(Partícula, Partícula, Cantidad de protones)
Atom_Neutron(Partícula, Partícula, Cantidad de neutrones)
Atom_Electron(Partícula, Partícula, Cantidad de electrones)
Molécula_Atom (Partícula, Partícula, Cantidad de átomo)

2.2 tabla asociativa única

Partícula (Partícula)
PartículaComposición (Partícula, Partícula, Cantidad)

Esta simplificación no pierde nada. Yo pienso que es mejor.
Pero si hay hechos que son específicos deAtom_Proton/Atom_Neutron/Atom_Electron2.1 puede ser mejor.

2.3 combinar 2.1 y 2.2

Partícula (Partícula)

Atom_Proton (Partícula, Partícula, otros atributos)
Atom_Neutron (Partícula, Partícula, otros atributos)
Atom_Electron (Partícula, Partícula, otros atributos)Molécula_Atom (Partícula, Partícula, otros atributos)

PartículaComposición(Partícula, Partícula, Cantidad, otros atributos)

En este enfoque, los atributos comunes sobre la composición de partículas entranPartículaComposición,
mientras que los atributos especiales sobre la composición de partículas van en tablas especiales.

3. Use tablas de subtipo.3.1 Una tabla para el tipo basePartículay tablas adicionales para subtipos (Átomo, Molécula, ...)

Partícula (Partícula)

Protón (Partícula, otros atributos)
Neutrón (Partícula, otros atributos)
Electrón (Partícula, otros atributos)
Átomo (Partícula, otros atributos)
Molécula (Partícula, otros atributos)

Atom_Proton (Partícula, Partícula, Cantidad de protones)
Atom_Neutron (Partícula, Partícula, Cantidad de neutrones)
Atom_Electron (Partícula, Partícula, Cantidad de electrones)
Molécula_Atom (Partícula, Partícula, Cantidad de átomo)

3.2 También podemos combinar elAtom_XXX Cantidad tablas en Atom y eliminarPronton/Neutrón/Electrón.

Partícula (Partícula)

Átomo (Partícula, Cantidad de protones, Cantidad de neutrones, Cantidad de electrones)
Molécula (Partícula, otros atributos)

Molécula_Atom (Partícula, Partícula, Cantidad de átomo)

Es más simple, pero la información sobreProtón/Neutrón/Electrón se pierde como en 1.2.

3.3 Podemos cambiar el nombre deMolécula_Atom para hacerlo más genérico

Partícula (Partícula)

Átomo (Partícula, Cantidad de protones, Cantidad de neutrones, Cantidad de electrones)
Molécula (Partícula, otros atributos)

PartículaComposición (Partícula, Partícula, Cantidad)

Esto se parece a 2.2, con tablas adicionales para subtipos (Átomo, Molécula)
Parece que 2.2 es un caso especial de 3.3.

3.4 Podemos combinar todos los enfoques anteriores y obtener un modelo genérico.

Partícula (Partícula)

Protón (Partícula, otros atributos)
Neutrón (Partícula, otros atributos)
Electrón (Partícula, otros atributos)
Átomo (Partícula, otros atributos)
Molécula (Partícula, otros atributos)

PartículaComposición (Partícula, Partícula, Cantidad, otros atributos)

Atom_Proton (Partícula, Partícula, otros atributos)
Atom_Neutron (Partícula, Partícula, otros atributos)
Atom_Electron (Partícula, Partícula, otros atributos)
Molécula_Atom (Partícula, Partícula, otros atributos)

Parece queAtom_Proton, Atom_Neutron, Atom_Electron yMolécula_Atom se puede considerar comosubtipos dePartículaComposición.

Este enfoque es el más complejo, contiene muchas tablas pero cada tabla tiene su función.

Preguntas¿Alguno de los diseños anteriores rompe las reglas del modelo relacional?¿Qué enfoque es el mejor? ¿Depende de cómo pensamos acerca de los datos? ¿Depende de los requisitos?

Si depende de los requisitos, ¿debemos elegir el diseño más simple al principio y luego hacerlo más genérico para acomodar los nuevos requisitos?
Aunque los modelos de datos resultantes comparten muchas similitudes, el diseño inicial puede influir ennombrando de las tablas / columnas, y eldominios de las teclas son diferentes

Si elegimos usar una tabla para cada tipo de cosas, podríamos elegir claves incompatibles paraÁtomo yMolécula, comopeso atómico paraÁtomo ynombre de la molécula paraMolécula.Si elegimos utilizar el enfoque genérico, podemos elegir una clave común para todas las partículas.
Cambiar las claves puede tener un mayor impacto en el sistema, por lo que puede no ser fácil pasar de un diseño simple a uno genérico.
¿Qué piensas?

PD: Este puede no ser un ejemplo apropiado y las soluciones pueden ser problemáticas, y puede haber más variaciones de los enfoques, pero puede obtener el punto con suerte.
Si tienes mejores diseños, compártelos conmigo.

Actualización 1¿Cuáles son los datos para modelar?

Inicialmente, estaba tratando de modelar elpartículas porque

Creo que hay relaciones de subtipado entre ellos, que es exactamente lo que estoy buscando.Son bien entendidos (?) Por las personas.Es un buen ejemplo de cómo las personas entienden el mundo.

Aquí está la imagen en mi mente.

No dije esto claramente porque tampoco tenía muy claro lo que estaba tratando de modelar.
En primer lugar, pensé que Atom es el padre de Proton / Neutron / Electron, y Molecule es el padre de Atom.
Entonces me di cuenta de que se trata de composición, no de subtipo, y no deJerarquía de tipos.

Tipos

He estado pensando en los tipos durante un tiempo, así como en la agrupación y clasificación.

Aquí hay una cita de "SQL y teoría relacional":

Entonces, ¿qué es un tipo exactamente? En esencia, esun conjunto de valores finito con nombre ─ todos los valores posibles de algún tipo específico: por ejemplo, todos los enteros posibles, o todas las cadenas de caracteres posibles, o todos los números de proveedores posibles, o todos los documentos XML posibles, o todas las relaciones posibles con un determinado encabezado (y así sucesivamente).

La gente acuñó el nombre "Entero" para representar el conjunto de enterosvalores.
En realidad, las personas acuñaron conceptos y nombres para identificar cosas, agrupando cosas para que podamos entender / modelar el mundo.

El protón es un conjunto de protones reales, el hidrógeno es un conjunto de átomos de hidrógeno, y así sucesivamente.
En este sentido, las partículas reales permanecen en elnivel más bajo de la jerarquía de tipos.
Al principio intentaba modelar todas las partículas, pero luego me quedé atrapado porque

No se me ocurrió una clave adecuada para identificar cada partícula real;Hay demasiados para almacenar en una base de datos.

Así que decidí ignorar las partículas reales y modelar los tipos en su lugar.

Cuando decimos "una molécula está compuesta de átomos", significa "una molécula de H2O real está compuesta de dos átomos de hidrógeno reales y un átomo de oxígeno", también significa "cualquier (tipo de) molécula está compuesta de (algunos tipos de) átomos ".

En lugar de exponer cada hecho sobre las partículas reales, solo podemos establecer hechos sobre los tipos de partículas.
Ese es el beneficio que obtenemos al agrupar cosas y nombres (tipos) acuñados.

Jerarquía de tipo de partícula como conjuntos

La jerarquía se puede traducir en definiciones establecidas.

Segundo nivel: tipos por encima de las partículas reales:

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 }

Niveles más altos

Usando la terminología de la teoría de conjuntos, el tipo A es un subtipo de B si A es un subconjunto de B.

Primero pensé que podríamos definir el tipo de átomo como:

S_atom = S_hydrogen union S_oxygen union ...

Sin embargo, los conjuntos son relaciones y los elementos son tuplas, por lo que la unión no funciona si las tuplas en las relaciones son incompatibles.

Los enfoques que usan tablas de subtipos resuelven el problema y modelan la relación del subconjunto.

Pero en el enfoque de subtipo, Atom todavía está en elsegundo nivel.

Los tipos de nivel superior se definen como conjuntos de conjuntos.

S_atom = { S_hydrogen, S_oxygen, ... }
S_molecule = { S_h2o, S_o2, ... }
S_particle = { S_proton, S_neutron, S_electron, S_atom, S_molecule }

lo que significa que Particle es el tipo de átomo, y Atom es el tipo de hidrógeno.

De esta manera, las relaciones entre partículas pueden representarse a un alto nivel.

El nuevo modelo de datos.4. Tratar los tipos como una jerarquía de tipos.

ParticleType (ParticleType, Name)
ParticleTypeHierarchy (ParticleType, ParentType)
PartículaComposición (PartileType, SubParticleType, Cantidad)

Data de muestra:

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 |

A modo de comparación, estos son los datos de muestra para un enfoque de tabla de subtipo.

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átomo

Estas personas definen estos tipos de partículas y las personas siguen definiendo nuevos conceptos para modelar nuevos aspectos de la realidad.
Podemos definir "subátomo" y la jerarquía se verá así:

El Enfoque 4 puede acomodar este cambio de jerarquía de tipo más fácilmente.

Actualización 2Los hechos para registrarExisten diferentes tipos de partículas en el mundo: protones, neutrones, electrones, átomos, moléculas.Los átomos están compuestos de protones, neutrones y electrones.Las moléculas están compuestas de átomos.Hay muchos tipos diferentes de átomos: hidrógeno, oxígeno, ...Hay muchos tipos diferentes de moléculas: H2O, O2, ...Un átomo de hidrógeno está compuesto de un protón y un electrón; ...Una molécula de H2O está compuesta por dos átomos de hidrógeno y un átomo de oxígeno; ...Los diferentes tipos de partículas pueden tener propiedades especiales, p. Un átomo tiene peso atómico, etc....

Respuestas a la pregunta(3)

Su respuesta a la pregunta