这似乎是一个非常基本的概念,但我甚至不确定在这里搜索什么。我做过的几次尝试都失败了。
基本上我有以下内容:
parameter(id PK, type_id, data...)
parameter_string(id PK, string data...)
parameter_float(id PK, float data...)
// etc, lots of them
parameter.id
唯一标识参数本身,parameter.type_id
唯一标识包含特定于该类型的数据的各种表之一。所有“派生”表格的id
字段在所有字段中都是唯一的,因此只需选择id
即可唯一标识该类型。
另一个要求是,相同的参数子类可以是“不同参数的一部分”,这是因为parameter.type_id
字段可以指向相同的参数“subclass”id
。
所以我想表示的方式是让每个参数的id
字段都是一个链接到parameter.type_id
的外键,但是我收到错误抱怨“表中的列”参数'与现有主键或UNIQUE约束匹配“。是的,这显然是真的。但是我不明白为什么这是一个要求,以及我如何解决它并仍然保留类似于我的结构。
答案 0 :(得分:0)
我需要猜测一下你的问题是什么,因为你并不是非常具体想要提出什么问题; - )
对我而言,您似乎可以像这样构建数据模型。要一次查询所有数据,您必须加入所有子类,例如
select parameter.id, parameter.data, parameter_string.data, parameter_float.data, ...
from parameter left outer join parameter_string on parameter.type_id = parameter_string.id
left outer join parameter_float on parameter.type_id = parameter_float.id
-- ...
或者,如果您只需要字符串参数值,则只需执行内部连接。
关于您的第二个问题/问题:反过来说:parameter_string.id
是parameter_string
表的主键。
parameter.type_id
是外键,但因为它一次引用了几个表,所以你不能将它作为外键约束......
要了解更多信息,您可以搜索关系数据库模型泛化之类的内容。