2016-07-15 64 views
2

在我的連接/連接表中存儲添加數據有什麼缺點。我應該在SQL連接/連接表中存儲其他數據嗎?

例如,我的工作貨運公司的數據庫中,我有3個表:

Table 1 - company, 
Table 2 - trailer_type, 
Table 3 - junction_table, 

每個公司可以有多個預告片類型,但我還需要在每個拖車類型的拖車計數每家公司。放置預告片數量的最合理邏輯位置似乎與company.id和trailer_type.id位於交匯處。

這樣做有沒有什麼缺點,如果有的話還有更好的方法嗎?

+0

不要將此數據存儲在數據庫中。使用查詢來計算每家公司的計數。 – Siyual

+0

在這一點上,查詢只會返回公司有多少「不同」的預告片類型,因爲我試圖確定存儲包含「每個公司有多少」拖車類型的數據的最佳方法。 – zcleft

回答

3

從你說的這個問題的方式來看,我認爲你的直覺大多是正確的。您將交接表標識爲保持您的位置的地方。但是你很猶豫,顯然是因爲它是一個「交界表」。

創建的所有表均等。從SQL的角度來看,沒有事實表,沒有維度表,沒有聯結表。只有桌子。

標準化設計表示識別每一行的最小密鑰。在你的情況下,聯結表的自然鍵類似於{company_id,trailer_type_id}。是否有信息在功能上依賴於該密鑰?爲什麼,是的,有:ntrailers。因此一列誕生了。

所以不要擔心它是什麼樣的表。想一下這一行意味着什麼,以及它是如何識別的。這會讓你在球道上。

0

首先,可以在聯結表中存儲附加信息。例如,創建的日期通常非常有趣。而且,您可以將許多實體的例子視爲聯結表 - 例如將客戶與發票相連接的結算記錄 - 並且記錄自然具有其他字段。

但是,在普通情況下,您不會存儲計數。這種類型的信息應該在Company表中,特別是如果它隨着時間的推移而修復的話。

如果它不是固定的,則會想到兩個選項。首先是一個緩慢變化的維度,用於存儲公司預告片的數量以及價值的有效和結束日期。一個可行的替代方法是將該值存儲在聯結表中。這不是首選,但在許多情況下它可能是一個很好的解決方案。

+0

如果他需要拖車類型的計數,並且沒有每個拖車的其他地方的記錄(正如Siyual的評論所假定的那樣),將其直接存儲在「公司」中並沒有多大意義。 – Uueerdo

+0

謝謝,@戈登回答我的問題。在我的情況下,公司可能會有25種A型拖車,30種B型拖車等,因此我們在談論10多種拖車類型並創建一個額外的表來存儲公司表中的公司表中的許多額外列計數會是很多冗餘。 – zcleft

+0

@Uueerdo你是對的 – zcleft

0

您可能希望將您的模式與公司和預告片之間的多對多關係略有不同:這就是您擁有聯結表的原因。

如何思考這樣說:

  1. 公司與拖車一到一對多的關係
  2. 拖車有TrailerDescriptions一個多到一的關係。

所以,你的拖車表將有這些列:

company_id 
trailer_description_id 
count 
etc. 

你甚至可以選擇枚舉個別拖車,通過添加列和設置「計數」爲1

trailer_id 
company_id 
trailer_description_id 
count = 1 
date_placed_in_service 
license_plate_number 

相關問題