2012-11-22 153 views
1

我必須使用SQL Server建立一個M:1的關係,但我一直在想,代表「多」端的列應該是外鍵,代表「一」端的列應該是主鍵。 目的是從表格中檢索信息,使用表示「多」一側的列表來表示「一」側的列。 你這個想法是否合理並能成功運作?SQL M:1的關係

回答

1

我一直在想,如果表示「多」方列應該 是外鍵和代表「一」方應 主鍵列。

表示多邊的列確實是表的主鍵,表示一邊的列也是另一個表的主鍵。但是其中之一有一個新列,是一個互相連接的外鍵(此列是使關係多對一的列,並且這是您應該關注的列)。

所以,你必須把它們分成兩個表格。考慮以下多對一的例子:

國家和城市的關係:一個國家有很多城市。

這兩個表來表示:

enter image description here

Countries

  • CountryID主鍵,
  • Name

Cities

  • CityID主鍵
  • CountryId外鍵引用Countries(ID)
  • Name

這就是你應該如何創建一個多對一的關係如下:

  • CountryIDCityID是兩個表中的主鍵。
  • 表示一邊的列CountryID是多邊(cities表)中的外鍵。這是你應該

1列:你應該在Cities複合鍵,而不是一個主表,除非你想有一個城市是在一個以上的國家與此同時。

+0

在這種情況下,你真的不應該促進創建具有相同名稱的主鍵「ID」的表;它使查詢變得混亂。既然你已經給了'Countries'和'Cities'作爲例子,至少調用了「country_id」和「city_id」這些鍵有什麼問題?除非你想要一個城市同時在一個以上的「國家」,否則你應該在「城市」中有一個複合關鍵字。 – Tony

+0

@Tony - 我使用了現有數據庫中的答案。但我使用了這種方法,因爲我最近使用'LINQ to SQL'和NHibernate作爲ORM。所以'ID'作爲主鍵是很好的,因爲在我的應用程序中將是'City.ID'和'country.Id'。但是,如果它在數據庫查詢中,我同意你的看法。這就是爲什麼我在列表中使用「CountryID」和「Cityid」的原因。現在修復。謝謝 –

+0

@Tony - 第二點,這是一個例子,我試圖簡化設計。 –