2011-08-01 37 views
5

就性能和可伸縮性而言,這將是更好的方法來執行MySQL中的一對多映射。映射一對多關係時應該有單獨的表嗎?

  • 使用單獨的列,但粘到2個表:

    (人):ID,名稱

    (電話):ID,數量,類型,PERSON_ID

  • 使用附表:

    (person):id,name

    (phon E):身份證,數量,類型

    (person_phone):ID,爲person_id,phone_id

+1

在什麼情況下,你想象做兩個連接來獲取所需的數據將比單個連接更快? – R0MANARMY

+0

我提到了性能和scabaility。我想知道是否有一個單獨的表會使它更具可擴展性。 – Shoaibi

+0

@Dan:可能會破壞多個數據庫服務器上的模式? [警告咖啡因的水平很久以前就達到了,所以這可能不是最好的說法] – Shoaibi

回答

11

這裏只有一個正確答案,而且這是第一個。

你的想法的第二個是你如何模擬多對多關係,而不是一對多。

+1

第二個暗示不同的人可以共享相同的電話號碼,這是BS – Bohemian

+7

它是「BS」?呃,我的妻子和我共用同一個電話多年。 –

+1

這只是一個例子,夥計們。他的實際問題是「映射一對多關係時」。保持冷靜:) –

5

在性能方面,避免連接總是比較便宜,這會增加要查詢的行數的多樣性。

只要一個電話只能由一個員工使用(一個真正的一對多),第一個選項是最好的。

+0

當然,在其他領域有最小化聯接的權衡。否則,每個人都會使用單表數據庫(這不像聽起來那麼可笑......他們曾經有過相當大的跟隨)。但是,加入'JOIN's來添加它們不會對你的表現有任何好處。 –

5

第一個比較好。

  1. 性能更好。
  2. 更少的存儲空間。
  3. 容易理解。

P.S.也許你甚至不需要id手機,(number, type, person_id)就夠了。

+0

太糟糕了,我只能調高一次,需要一個單獨的upvote for P.S. :) – Shoaibi

相關問題