2012-03-15 83 views
2

我有一個任務,我要在數據庫中創建兩個表。桌子看起來像這樣;將一個表中的ID鏈接到另一個表中的數據

ContactPerson(ID,名,姓,電子郵件,******中國)公司 (ID,公司名稱)

現在我的問題是,我有一個ContactPerson鏈接到一個特定的公司,但我不能讓他們在同一張桌子裏。

我明白,我可以使用連接語句,以顯示在一個查詢兩個表,但我需要的數據庫,知道哪些人是與哪家公司時,我實現這個DATABSE到我的asp.net項目。

我該怎麼做?

回答

1

你說過「特定」的公司,所以我假設你有每人一個公司選擇所有的人。

放入稱爲CompanyID用戶表中的列...

ALTER TABLE ContactPerson 
ADD CompanyID int 

(假設你的ID是整數) ,然後創建以下外鍵:

ALTER TABLE [dbo].ContactPerson 
    ADD CONSTRAINT [FK_ContactPerson_Company] 
    FOREIGN KEY (CompanyID) 
    REFERENCES Company (ID) 

鯊魚是,如果正確你想要一個多對多的關係。

爲了讓所有的人在一個公司:

選擇 * FROM ContactPerson WHERE CompanyID = X

你沒有申請外鍵約束,但是如果你不」 t,您可能會無意中放入無效數據。所有的「約束」都會爲您執行一條規則,換言之,「確保SQL知道哪些人在哪個公司」,因爲您的問題表明您需要執行此操作。

上面的查詢將工作沒有外鍵約束,但隨後你的數據庫不「知道」的關係。

..和如果我嘗試並插入一個companyid的人不存在,SQL將拋出一個錯誤(這是一件好事)。

+0

是的,每個人都應該鏈接到一家公司。但是,每家公司都可以有幾個人與之相關聯。 密鑰如何工作?我從來沒有使用過密鑰。 – Joel 2012-03-15 13:04:09

+0

外鍵只是一種告訴sql一個表中的列鏈接到另一個表中的列的方法。外鍵是我想象你的任務是關於。 – Gats 2012-03-15 13:06:01

+0

好,太好了,謝謝! – Joel 2012-03-15 13:09:19

0

由於這是一個一對多的關係,我通常將數據放到了ContactPerson表。但是,因爲你明確地說你不能,那麼就創建一個連接表:

create table ContactPersonCompany 
(
    ContactPersonID int not null foreign key references ContactPerson(ID), 
    CompanyID int not null foreign key references Company(ID) 
) 

現在你有ContactPersonCompany之間的關係。

示例:從特定的公司

select 
    cp.Surname, 
    cp.Forename 
from ContactPerson cp 
inner join ContactPersonCompany cpc 
on cp.ID = cpc.ContactPersonID 
inner join Company c 
on cpc.CompanyID = c.ID 
where c.CompanyName = 'Some Company' 
相關問題