2013-03-29 59 views
0

我设置了一些非常简单的测试表,并想使列USERKEY我的表tb_TestUSERS的主键则使列USERKEY在表tb_TestFACT外键之间的主键/外键关系。然后在这个主键和外键之间建立关系。我希望能够使用脚本完成所有这些。创建两个表

到目前为止,我只是有基本的表脚本:

CREATE TABLE WH.dbo.tb_TestFACT 
(DATEKEY INT,USERKEY INT); 
INSERT INTO WH.dbo.tb_TestFACT 
    values 
    (1,1), 
    (2,1), 
    (3,2), 
    (4,2), 
    (5,2), 
    (6,3), 
    (7,3); 

CREATE TABLE WH.dbo.tb_TestUSERS 
(USERKEY INT,NAME VARCHAR(10)); 
INSERT INTO WH.dbo.tb_TestUSERS 
    values 
    (1,'FRED'), 
    (2,'PHIL'), 
    (3,'JACKO'); 

回答

4
CREATE TABLE tb_TestUSERS 
(
    UserKey INT NOT NULL, 
    Name VARCHAR(30), 
    CONSTRAINT tb_pk PRIMARY KEY (UserKey), 
    CONSTRAINT tb_uq UNIQUE (Name) 
) 
GO 

CREATE TABLE tb_TestFACT 
(
    UserKey INT NOT NULL, 
    DateKey INT NOT NULL, 
    CONSTRAINT tb_fk FOREIGN KEY (UserKey) 
     REFERENCES tb_TestUSERS(UserKey), 
    CONSTRAINT tb_uq1 UNIQUE (UserKey, DateKey) 
) 
GO 
+0

+1 @J_W是'CONSTRAINT tb_uq UNIQUE(Name)'和'CONSTRAINT tb_uq1 UNIQUE(UserKey,DateKey)'必需的行吗?我意识到重复的名字会很奇怪,但是这是最重要的吗? – whytheq

+0

'CONSTRAINT tb_uq UNIQUE(Name)'如果你想让用户拥有相同的名字,你可以删除它。 'CONSTRAINT tb_uq1 UNIQUE(UserKey,DateKey)'将执行'UserKey'只能具有唯一的'DateKey'。 –

+1

谢谢 - 可能会将这种情况留在更大的图片中,用户可能会在同一天有很多会话 - 感谢包含这些额外的CONTRAINT脚本,因为我将在生产架构中广泛使用它们。 – whytheq

1

如果你有SQL Server Management StudioSQL Server Management Studio Express那么实际上你可以得到它为你做。或者,您可以在用户界面中执行此操作,并将其编写到新窗口 - 所有非常有用的工具。

+0

+1感谢您的意见的明确解释 – whytheq