2011-10-07 98 views
0

我有3個實體:MySQL數據庫的基本設計

  • 建築
  • 活動
  • 地址

而且我不知道如何向外國鍵表之間的關係。

建築物位於地址。 活動在地址上進行(一次一個地址)。

但我只想要一個地址表。

假設下一個屬性:

建築物(ID,電話,電子郵件,圖片,評論)< - 我應該把ADDRESS_ID? 活動(編號,說明)< - 我應該把address_id?

地址(身份證,街道,城市,州,郵政編碼)< - 或者我應該在這裏放置center_id和activity_id?

預先感謝您!

+0

如果這是一個家庭作業問題,你應該這樣標記它。 – Zkoh

回答

1

您應該在建築物和活動表中使用address_id
地址是獨一無二的,而許多建築物和許多活動可以位於相同的地址!

+0

你的答案可能有2個或更多的建築物引用相同的address_id否?我不認爲你的回答是正確的 – alex

0

你的問題意味着多個建築物可以位於同一地址 - 這是你想要的嗎?如果是這樣,就歸它據此:

Address是你的「根實體」:

ADDRESS(address_id,street,city,state,postcode) 

一個Building可以位於正好一個Address,所以包括參考Address,外鍵:

BUILDING(building_id,phone,email,image,comments,address_id) 

的活動是由外鍵正好一個地址進行引用

ACTIVITY_ID(activity_id,description,address_id) 

也許你應該想想是否:在地址門牌號

  • 缺什麼?
  • 應該在一個給定的地址有多個建築物可以嗎?
  • 給定建築物的多個地址是可能的(是的,我見過這個)?
  • 單獨的ADDRESS表真的很有必要(見上面的問題)?
0

亞歷克斯,你應該在兩個表中都有ID,就像你在問題中所說的那樣。沒有必要將它們放在單獨的表格中,因爲實際上建築物的地址將成爲執行活動的地方,對嗎?

如果您擔心兩個建築物具有相同的位置,請在建築物表的address_id列中添加一個uniq索引。

向前移動一點。你有沒有建築物的地址?如果是這種情況,那麼您甚至可以將地址數據(列)添加到建築物表格中。因爲這將是一對一的關係,並且其他實體不需要使用地址表,而是建築物。這樣你會擺脫地址表