在sql

时间:2017-10-24 15:53:50

标签: sql

我有以下表格数据,我需要在关系数据库中表示(以及许多其他内容!):

customer   valueID_1   valueID_2 response
-----------------------------------------
1          None        None      "hello"
1          1           None      "hi"
1          None        1         "wassup"
1          1           1         "goodbye"

valueID_1valueID_2都在另一个表中引用相同的主键。

我理解在SQL中重新创建这种格式是不好的关系数据库设计,如果可能的话我应该避免使用数组。我的不完整解决方案如下:

CREATE TABLE example 
(
    customer int4    references customers(customer),
    valueID  int4    references values(valueID),
    valueID_position int4
    response varchar

    PRIMARY KEY (customer, valueID, valueID_position, response)
);

看起来像这样:

customer   valueID   valueID_position response 
----------------------------------------------
1          None      1                "hello"
1          None      1                "wassup"
1          1         1                "hi"
1          1         1                "goodbye"
1          None      2                "hello"
1          None      2                "hi"
1          1         2                "wassup"
1          1         2                "goodbye"

然后我会创建一个视图,让我可以看到之前显示的信息:

CREATE VIEW example_view
   SELECT 
       t1.customer, t1.valueID as valueID_1, t2.valueID as valueID_2, response
   FROM t1 AS (

AS SELECT customer, valueID, response
FROM example
WHERE valueID_position = 1)

LEFT JOIN t2 AS(

SELECT customer, valueID, response
FROM example
WHERE valueID_position = 2)

ON t1.customer = t2.customer
AND t1.response = t2.response
  1. 这是否符合我的目标?
  2. 有更好的方法吗?!

1 个答案:

答案 0 :(得分:1)

我会这样做:

Sub SomeMethod(Of T)(x As T, y As T) 
    If x Is y
        ' do stuff
    End If
End Sub

您可以CREATE TABLE example ( ID int primary key identity(1,1) CustomerID int not null references customers(customerID), Value1ID int null references values(valueID), Value2ID int null references values(valueID), response nvarchar not null ); 将数据insert放入此表中,直接select直接来自该表;不需要观点。