我有一個任務,我要在數據庫中創建兩個表。桌子看起來像這樣;將一個表中的ID鏈接到另一個表中的數據
ContactPerson(ID,名,姓,電子郵件,******中國)公司 (ID,公司名稱)
現在我的問題是,我有一個ContactPerson鏈接到一個特定的公司,但我不能讓他們在同一張桌子裏。
我明白,我可以使用連接語句,以顯示在一個查詢兩個表,但我需要的數據庫,知道哪些人是與哪家公司時,我實現這個DATABSE到我的asp.net項目。
我該怎麼做?
我有一個任務,我要在數據庫中創建兩個表。桌子看起來像這樣;將一個表中的ID鏈接到另一個表中的數據
ContactPerson(ID,名,姓,電子郵件,******中國)公司 (ID,公司名稱)
現在我的問題是,我有一個ContactPerson鏈接到一個特定的公司,但我不能讓他們在同一張桌子裏。
我明白,我可以使用連接語句,以顯示在一個查詢兩個表,但我需要的數據庫,知道哪些人是與哪家公司時,我實現這個DATABSE到我的asp.net項目。
我該怎麼做?
你說過「特定」的公司,所以我假設你有每人一個公司選擇所有的人。
放入稱爲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將拋出一個錯誤(這是一件好事)。
由於這是一個一對多的關係,我通常將數據放到了ContactPerson
表。但是,因爲你明確地說你不能,那麼就創建一個連接表:
create table ContactPersonCompany
(
ContactPersonID int not null foreign key references ContactPerson(ID),
CompanyID int not null foreign key references Company(ID)
)
現在你有ContactPerson
和Company
之間的關係。
示例:從特定的公司
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'
是的,每個人都應該鏈接到一家公司。但是,每家公司都可以有幾個人與之相關聯。 密鑰如何工作?我從來沒有使用過密鑰。 – Joel 2012-03-15 13:04:09
外鍵只是一種告訴sql一個表中的列鏈接到另一個表中的列的方法。外鍵是我想象你的任務是關於。 – Gats 2012-03-15 13:06:01
好,太好了,謝謝! – Joel 2012-03-15 13:09:19