Mysql 关系数据库:属性依赖于上下文的项
我正试图建立一个数据库,但对于如何构建它,我有些不知所措。将其设置为关系似乎是有意义的,因为在我的数据库中Mysql 关系数据库:属性依赖于上下文的项,mysql,sql,database,postgresql,database-design,Mysql,Sql,Database,Postgresql,Database Design,我正试图建立一个数据库,但对于如何构建它,我有些不知所措。将其设置为关系似乎是有意义的,因为在我的数据库中对象包含原子的列表,这些原子可以在其他对象项中重复出现。所以我们有 对象伪代码: { name: 'object1', atoms: [ {name: 'atom1', color: 'red'}, {name: 'atom2', color: 'green'}, ... ] } 我遇到的困难是:原子有不同的颜色,这取决于它们出现在什么对象中。因此at
对象
包含原子的列表
,这些原子可以在其他对象
项中重复出现。所以我们有
对象
伪代码:
{
name: 'object1',
atoms: [
{name: 'atom1', color: 'red'},
{name: 'atom2', color: 'green'},
...
]
}
我遇到的困难是:原子有不同的颜色,这取决于它们出现在什么对象中。因此atom1
在object1
中可能是红色,但在object2
中可能是绿色。它们的颜色取决于整体环境和对象中存在的其他原子。但是由于这一点,它们在概念上并不是不同的原子——可以说,atom1
有时是绿色的,有时是红色的。我仍然希望能够将它们计算在内
我不明白如何最好地将其建模到关系数据库中。原子再次出现在物体中,但它们的某些性质可能不同。因此,我不能简单地说,要从atoms表中查找
atom1、atom2和atom3,只需调用Object1
。有什么想法吗 这听起来像是三张表:
对象
objectId
objectName
原子
atomId
atomName
objectAtoms
objectId
atomId
color
我不确定“color”是否也应该是一个单独的参考表。有点冗长,但显示了基本的设计方法:自然语言中的谓词和约束
所有属性(列)不为空
[px]=谓词x
(c x.y)=约束x.y
PK=主键
AK=备用键(唯一)
FK=外键
[p 1]存在由
对象ID
标识的对象,该对象名为对象名
(c 1.1)对象由对象ID
标识
(c 1.2)每个物体只有一个名称;对于每个名称,只有一个对象具有该名称
object{object\u ID,object\u NAME}--p1
PK{OBJECT_ID}--c1.1
AK{OBJECT_NAME}--C1.2
[P2]存在由Atom\u NAME
标识的原子
(c 2.1)原子通过原子名称来识别
atom{atom_NAME}--p2
PK{ATOM_NAME}--c2.1
[p3]原子颜色原子颜色
存在
(c 3.1)原子颜色通过Atom\u color
来识别
atom_color{atom_color}--p3
PK{ATOM_COLOR}--c3.1
[p4]原子原子名称
出现在对象对象ID
的颜色原子颜色
中
(c 4.1)出现在物体中的每个原子;出现在该对象中的原子正好以一种原子颜色出现
(c 4.2)对于以颜色出现的每个原子;那个原子可以在不止一个物体上以那个颜色出现
(c 4.3)每个物体和原子颜色;一个以上的原子可能以该颜色出现在该物体中
(C4.4)如果一个原子以某种颜色出现在一个物体上,那么这个原子一定存在
(C4.5)如果一个原子以某种颜色出现在一个物体上,那么这个物体一定存在
(C4.6)如果一个原子以某种颜色出现在一个物体中,那么该原子的颜色必须存在
atom\u object{atom\u NAME,object\u ID,atom\u COLOR}--p4
PK{ATOM_NAME,OBJECT_ID}--c4.1,4.2,4.3
FK1{ATOM_NAME}引用了ATOM{ATOM_NAME}--C4.4
FK2{OBJECT_ID}引用对象{OBJECT_ID}--C4.5
FK3{ATOM_COLOR}引用了ATOM_COLOR{ATOM_COLOR}--C4.6
缺少objects.objectName。就我个人而言,我更喜欢objects.name/atoms.name,否则看起来我们在每个列中重复实体名称。。。