Database design 子类型的关系数据建模

Database design 子类型的关系数据建模,database-design,relational-database,data-modeling,subtype,relational-model,Database Design,Relational Database,Data Modeling,Subtype,Relational Model,我正在学习关系模型和数据建模。 关于子类型,我有一些困惑 我知道数据建模是一个迭代过程,有许多不同的方法来建模。 但我不知道如何在不同的选择之间做出选择 例子 假设我们想要模拟粒子(分子、原子、质子、中子、电子等)。 为了简单起见,让我们忽略夸克和其他粒子 由于同一类型的所有粒子行为相同,我们不打算对单个粒子建模。 换句话说,我们不会储存每个氢原子。 相反,我们将储存氢、氧和其他原子类型。 我们将要建模的实际上是粒子类型以及它们之间的关系 我不小心使用了单词“键入”。 氢原子就是一个例子。氢是一

我正在学习关系模型和数据建模。
关于子类型,我有一些困惑

我知道数据建模是一个迭代过程,有许多不同的方法来建模。
但我不知道如何在不同的选择之间做出选择

例子 假设我们想要模拟粒子(分子、原子、质子、中子、电子等)。
为了简单起见,让我们忽略夸克和其他粒子

由于同一类型的所有粒子行为相同,我们不打算对单个粒子建模。
换句话说,我们不会储存每个氢原子。
相反,我们将储存氢、氧和其他原子类型。
我们将要建模的实际上是粒子类型以及它们之间的关系

我不小心使用了单词“键入”
氢原子就是一个例子。氢是一种类型。氢也是一种原子。
是的,涉及到类型的层次结构。我们忽略了最底层(单个粒子)

方法 我可以想出几种方法对它们进行建模

1.每种类型(粒子类型)的一个表(关系、实体)。 1.1我想到的第一种方法。 质子(质子)
中子(中子)
电子(电子)

原子(原子)
原子质子(原子、质子、数量)
原子\中子(原子、中子、数量)
原子\电子(原子、电子、数量)

分子(分子)
分子\原子(分子、原子、数量)

1.2由于质子/中子/电子只有一种,我们可以简化它。 原子(原子、质子、中子、电子)
分子(分子)
分子\原子(分子、原子、数量)

在这个简化模型中,关于质子的事实丢失了

2.所有内容都在一个表中,关联表表示它们之间的关系。 2.1每个关系对应一个关联表 粒子(粒子)

原子质子(粒子,粒子,质子)
原子\中子(粒子,粒子,中子学)
原子与电子(粒子、粒子、电子)
分子\原子(粒子、粒子、原子量)

2.2单一关联表 粒子(粒子)
粒子组成(粒子、粒子、数量)

这种简化不会失去任何东西。我认为这样更好。
但是如果有一些事实是关于原子质子/原子中子/原子电子的,2.1可能更好

2.3合并2.1和2.2 粒子(粒子)

原子质子(粒子、粒子、其他属性)
原子\中子(粒子、粒子、其他属性)
原子\电子(粒子、粒子、其他属性) 分子\原子(粒子、粒子、其他属性)

ParticleComposition(粒子、粒子、数量、其他属性)

在这种方法中,有关粒子组成的常见属性进入ParticleComposition,
而关于粒子组成的特殊属性在特殊的表中

3.使用子类型表。 3.1基型粒子表和子类型(原子、分子等)附加表。 粒子(粒子)

质子(粒子、其他属性)
中子(粒子、其他属性)
电子(粒子、其他属性)
原子(粒子、其他属性)
分子(粒子、其他属性)

原子质子(粒子,粒子,质子)
原子\中子(粒子,粒子,中子学)
原子与电子(粒子、粒子、电子)
分子\原子(粒子、粒子、原子量)

3.2我们还可以在Atom中组合Atom_xxx数量表,并删除Pronton/中子/电子。 粒子(粒子)

原子(粒子、质子、中子、电子)
分子(粒子、其他属性)

分子\原子(粒子、粒子、原子量)

它更简单,但有关质子/中子/电子的信息丢失,如1.2所示

3.3我们可以更改分子_原子的名称,使其更通用。 粒子(粒子)

原子(粒子、质子、中子、电子)
分子(粒子、其他属性)

粒子组成(粒子、粒子、数量)

这看起来像2.2,还有子类型(原子、分子)的附加表格。
似乎2.2是3.3的特例

3.4我们可以将上述所有方法结合起来,得到一个通用模型。 粒子(粒子)

质子(粒子、其他属性)
中子(粒子、其他属性)
电子(粒子、其他属性)
原子(粒子、其他属性)
分子(粒子、其他属性)

ParticleComposition(粒子、粒子、数量、其他属性)

原子质子(粒子、粒子、其他属性)
原子\中子(粒子、粒子、其他属性)
原子\电子(粒子、粒子、其他属性)
分子\原子(粒子、粒子、其他属性)

原子质子、原子中子、原子电子和分子原子似乎可以看作是粒子组成的子类型

这种方法是最复杂的,它包含许多表,但每个表都有自己的角色

问题
  • 上述设计是否违反了关系模型的规则
  • 哪种方法最好?这取决于我们对数据的看法吗?是否取决于要求
  • 如果取决于需求,我们是否应该首先选择最简单的设计,然后使其更通用,以适应新的需求?
    虽然生成的数据模型有很多相似之处,但初始设计可能会影响表/列的命名,键的域也不同

    • 如果我们选择为每种类型的事物使用一个表,我们可以为原子和分子选择不兼容的键,例如at
      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 }
      
      S_atom = S_hydrogen union S_oxygen union ...
      
      S_atom = { S_hydrogen, S_oxygen, ... }
      S_molecule = { S_h2o, S_o2, ... }
      S_particle = { S_proton, S_neutron, S_electron, S_atom, S_molecule }
      
      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 | 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 |