Sql 是否可以将不同表中的数据合并到一列中
我试图用SQL模式实现以下JSON结构:Sql 是否可以将不同表中的数据合并到一列中,sql,postgresql,rdbms,postgresql-9.6,Sql,Postgresql,Rdbms,Postgresql 9.6,我试图用SQL模式实现以下JSON结构: "data_set": [ { "id": 0, "annotation": "foo", "value": { "type": "number", "value": 10.0, "unit": "m" } }, { "id": 1, "annotation": "bar", "value":
"data_set": [
{
"id": 0,
"annotation": "foo",
"value":
{
"type": "number",
"value": 10.0,
"unit": "m"
}
},
{
"id": 1,
"annotation": "bar",
"value":
{
"type": "text",
"value": "Hello World"
}
}
]
棘手的部分是,我不仅要包含一种类型的值,还要包含不同类型的值。我的想法是为每个值设置不同的表格,例如:
numeric_value: id {PK} | type | value | unit
text_values: id {PK} | type | value
并通过外键将其包含在数据集合表中:
data_set: id {PK} | annotation | value {FK}
我的问题是,我不确定如何使用键引用一列中不同表的ID,当然,如果我在解决这个问题时采取了完全错误的方法 你可以用不同的方式来做。其中一种方法是只使用一个表,并将其定义为当
值类型为数字时,您必须填写数值和单位(除此之外没有其他内容)的值,当它为文本时,您必须填写文本\u值列(其余部分不填写,保留为空)
这个定义可以做到:
CREATE TABLE data_set
(
data_set_id integer PRIMARY KEY,
annotation text,
value_type text NOT NULL,
numeric_value numeric,
unit text,
text_value text,
/* Constraint to make sure values are consistent with definition */
CHECK (CASE WHEN value_type = 'text' THEN
numeric_value IS NULL AND unit IS NULL AND text_value IS NOT NULL
WHEN value_type = 'number' THEN
numeric_value IS NOT NULL AND unit IS NOT NULL AND text_value IS NULL
ELSE
false
END)
) ;
以下插入内容有效:
INSERT INTO
data_set
(data_set_id, annotation, value_type, numeric_value, unit)
VALUES
(1, 'height', 'number', 10.0, 'm') ;
INSERT INTO
data_set
(data_set_id, annotation, value_type, text_value)
VALUES
(2, 'brand', 'text', 'BigBrand') ;
这些人不会:
INSERT INTO
data_set
(data_set_id, annotation, value_type, text_value)
VALUES
(3, 'brand', 'strange_type', 'misstake') ;
INSERT INTO
data_set
(data_set_id, annotation, value_type, text_value)
VALUES
(4, 'brand', 'number', 'misstake') ;