Sql

时间:2015-05-12 19:38:38

标签: sql sql-server

这似乎是一个非常基本的概念,但我甚至不确定在这里搜索什么。我做过的几次尝试都失败了。

基本上我有以下内容:

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约束匹配“。是的,这显然是真的。但是我不明白为什么这是一个要求,以及我如何解决它并仍然保留类似于我的结构。

1 个答案:

答案 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.idparameter_string表的主键。 parameter.type_id是外键,但因为它一次引用了几个表,所以你不能将它作为外键约束......

要了解更多信息,您可以搜索关系数据库模型泛化之类的内容。