2010-03-08 25 views
0

我有三個表格:發佈,附件和媒體。數據庫規範化 - 我應該將表連接到多深?

帖子有附件,附件有媒體。

當前,Post和Attachment表由外鍵鏈接,Attachment和Media表也是如此。我的問題是,爲了適當的數據庫設計和規範化,我應該在Post和Media之間建立外鍵關係嗎?我不確定我應該將這些表格連接在一起。

謝謝

+0

我不知道我理解你的問題。我不認爲郵政的類型要根據郵政附件所在的媒體進行更改。在這種情況下,如果Post和Media之間沒有直接關係,那麼可能不需要是外鍵關係? – 2010-03-08 15:32:01

+0

ATTACHMENT可以存在於幾個POST嗎? – amelvin 2010-03-08 15:36:58

+0

請不要評論。請用人們需要回答問題的信息更新問題。請更新問題並刪除您的評論。 – 2010-03-08 15:39:30

回答

3

了一個正確的數據庫設計和規範化,我應該安裝後與媒體之間的外鍵關係着想denormalizes?

對於「正確正常化」你必須確保沒有「更新異常」。

如果有人更新帖子,附件和媒體會發生什麼變化?重命名帖子是否會斷開附件和/或媒體的連接?如果是這樣,那麼你的FK是錯誤的。 [提示,你必須使用代理鍵而不是帖子的名字來使你的FK的工作。]

如果有人想「附件」從一個職位「移動」到另一個[即更新附件的FK參考],什麼媒體發生?它是否與附件保持一致並轉移到新郵政?

你可以結束帖子有附件和媒體,以及附件有媒體嗎?郵政和附件是否會對媒體持不同意見,因爲附件「已被移動」,但郵政並未更新?

如果你可以有矛盾,你已經打破了第二範式,你有重複的關鍵關係,你不應該重複。

適當規範化很簡單。

數據取決於關鍵,而且全部是關鍵。

不要複製或重複任何地方的依賴關係。你所說的「深度鏈接」似乎是一個重複的依賴關係。

+0

從我的角度來看,所有這些都是商業邏輯關注點。底層結構代表了某些假定和關係(帖子可能有附件,附件可能有媒體文件或沒有)。我認爲這是他的想法,並且這是正常化的。 – 2010-03-08 15:45:09

+0

您對將附件從一個貼子「移動」到另一個貼紙的評論是將這個家庭帶給我的。謝謝! (現在是時候打開書,找出代理鍵是什麼;)) – 2010-03-08 15:46:39

+0

@JorgeCórdoba。我認爲「業務邏輯」是數據庫必須代表的東西。除了必須支持的「業務邏輯」之外,我看不出有什麼「底層結構」。 – 2010-03-08 17:03:40

0

鏈接表儘可能深。非正常化報告並在看到性能問題後。

1

我認爲你沒事。

看來可能是一個POST可以有多個附件和附件可以有幾個職位,如果是的話,你將需要一個鏈接實體進行第三範式:

Post 

    | 
    | 
    ----- 
    | | | 

Post_Attachment 

    | | | 
    ----- 
    | 
    | 

Attachment 

    | 
    | 
    ----- 
    | | | 

    Media 

但是,從你的描述似乎有POST和MEDIA之間不存在關鍵關係。

2

不,規範化深達3NF而言你的,這是通常的標準化水平,結構是好的。

爲了記錄正常化它的成本以及它的好處,特別是對數據的插入和刪除對控制權正是如何和什麼可以插入一個重大的水平。

一個規範化,並在自己的風險:)

1

如果您需要過濾或選擇特定帖子的媒體而不考慮附件,則將媒體添加到帖子的唯一原因是將媒體添加到帖子。即使您需要顯示媒體(可能按類型)及其所屬的帖子,我也不會添加直接關聯;添加第二個連接(通過附件表)的開銷可能很小,所以您不太可能看到任何重大改進。

0

首先,您不需要使用代理鍵。如果你願意,一個合適的數據庫將會級聯更新。規範化數據庫時,通常會嘗試實現第三範式甚至BCNF。第二範式並不總是保護您的數據免受更新異常的影響。一旦您生成一個ER圖並確定哪些數據是實體的一部分(郵件,附件,媒體)以及哪些數據是這些關係的一部分,那麼在模式中確定函數依賴關係應該很簡單。根據您的關係的基數,您可能需要也可能不需要連接表。最好的做法是在圖表中對數據進行建模,然後處理實施問題。

+0

請使用級聯更新。多麼可怕的建議。當您需要更新10,000行有相關記錄的行時,您是否知道這種效果?這是一個數據庫被鎖定幾個小時,沒有人可以使用。級聯更新是不好的做法。 – HLGEM 2010-03-08 16:48:55

+1

數以百萬計的相關記錄?這聽起來像一個可怕的設計。級聯更新非常合理。在任何理智的數據庫中,他們都不會鎖定表格。 – dcolish 2010-03-08 16:54:10