2014-01-17 76 views
0

我想在sql命令中設置兩個表。在sql命令中定義1:0 ... 1關係

我有一個Customer表和User Account表。

A Customer沒有或至多有1 User_account(0 ... 1)的關係。

但是一個USER_ACCOUNT將始終有一個CUSTOMER

如何通過SQL命令執行此操作?

編輯這是我迄今爲止嘗試:

ALTER TABLE UserAccount DROP CONSTRAINT FKUserAccountToCustomer 
GO 

DROP TABLE Customer; 
DROP TABLE UserAccount; 
GO 

CREATE TABLE Customer 
(
    CustomerID INT NOT NULL IDENTITY, 
    (...) 
); 
GO 

CREATE TABLE UserAccount 
(
    UserAccountID INT NOT NULL IDENTITY, 
    CustomerID INT NOT NULL, 
    (...) 
); 
GO 

ALTER TABLE Customer ADD PRIMARY KEY (CustomerID); 
GO 

ALTER TABLE UserAccount ADD PRIMARY KEY(UserAccountID); 
GO 

IF NOT EXISTS (SELECT * FROM sysdiagrams WHERE name = 'FKUserAccountToCustomer') 
BEGIN 
    ALTER TABLE UserAccount 
    ADD CONSTRAINT FKUserAccountToCustomer 
    FOREIGN KEY(CustomerID) 
    REFERENCES Customer(CustomerID) 
END; 
+0

詢問代碼的問題必須證明最小的努力。請告訴我們你已經嘗試了什麼。 – Kermit

+0

非常高興,給我一點時間。 – hsim

+0

目前還不清楚你想要做什麼。你想創建表嗎?或查詢現有數據? – musefan

回答

1

如果客戶可以有0個或1個用戶帳戶,那麼使UserAccount標識一樣的客戶ID,與主鍵和外鍵約束強制執行,像這樣:

CREATE TABLE Customer 
(
    CustomerId  int not null identity(1,1) 
    constraint PK_Customer 
    primary key clustered 
    ,(...) 
) 

CREATE TABLE UserAccount 
(
    UserAccountId int not null 
    constraint PK_UserAccount 
    primary key clustered 
    constraint FK_UserAccount__Customer 
    foreign key references Customer (CustomerId) 
    ,(...) 
) 

這樣:

  • 你不能沒有先創建一個客戶
  • 創建用戶帳戶
  • 你不能分配給同一客戶編號
  • 兩個或兩個以上的用戶帳戶,如果「你的」客戶編號是不是在UserAccount,那麼你有沒有用戶帳戶
+0

哇!好的,我會試試看。 – hsim

+0

有趣:)看起來像這樣做的工作。 「聚集」字是什麼意思? – hsim

+1

描述聚集索引和非聚集索引是一個漫長的討論。以下是SQL聯機叢書說明:http://technet.microsoft.com/en-us/library/ms190457.aspx –

0

您可以創建一個唯一約束,以在UserAccountCustomerId,以確保客戶不能有多個帳戶..

應該是可行的像這樣

ALTER TABLE UserAccount ADD CONSTRAINT IX_Customer UNIQUE(CustomerId) 
+0

我會試試這個。 – hsim

+0

按照我寫我的腳本的方式,你會如何編寫它以使它獨一無二?你將如何將其轉介給客戶? – hsim