2013-03-29 56 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