2014-09-10 29 views
0

作爲新的關係數據庫設計,我試圖澄清一條信息來正確設計這個數據庫。儘管我使用Filemaker作爲平臺,但我認爲這是一個普遍的問題。關係數據庫設計 - 對象具體到多對多,我用自聯接表還是新表解決

使用理想情況下具有所有一對多關係的邏輯,並使用單獨的表或連接表來解決這些問題。

我有一個數據庫包含多個產品,由多個品牌製作,屬於多個產品類別。我還希望在報告時儘可能擴展規模,儘可能多地分割和切分數據,因爲用戶的需求在不斷變化。

因此,當我提出「每個品牌是否有多個產品」的問題時,我會得到一個肯定答案,而「每個產品是否有多個品牌」答案都是否定的。所以這是一對多的關係,但似乎一個自連接表可能會給我所需的一切。

這種方法也似乎是爲了其他「產品相關」信息(如產品類別)而下降,每個產品都綁定到一個產品類別,但只有一個產品類別與產品相關。

所以我看到了2種可能性,製作了三張表,並將它們與主鍵和外鍵結合在一起,一個用於品牌,一個用於產品類別,另一個用於產品。

第二種可能性是創建一張表,將品牌和產品類別以及產品信息全部放在一張表中(因爲它們都與產品相關),並且只需執行自連接和其他基於查詢的表格就可以給我未來的報告要求將隨着時間而改變。

我在尋找可能會指向正確方向的經驗輸入。

在此先感謝!

+0

三桌......你需要嘗試和規範它..你甚至可能要使用三個以上取決於數據,有多少你需要的答覆切片和切塊它 – 2014-09-10 19:29:55

+0

謝謝,所以多個表減少/消除冗餘,你不能在關係數據庫中有太多的「一對多」表。 – 2014-09-10 19:38:21

+0

如果你正在複製表中的數據,因爲另一列有不同的數據,那麼最好把它分成另一個表:) – 2014-09-10 19:51:29

回答

0

我不確定你在哪裏看到自己加入的房間。在我看來,你在說:我有一張產品表;每個產品都有一個品牌和一個(?)類別。如果是這樣的話,那麼你需要或者三個表:

Brands -<Products>- Categories 

或者 - 在只有的Filemaker - 你可以更換任何或值列表無論是品牌和分類表(假設你將不會被重新命名品牌/類別和一些報告功能的代價)。所以真的取決於你最終想要得到什麼類型的信息。

0

您是否想要存儲有關品牌(公司URL,電話號碼等)或產品類別(描述等)的其他信息?

如果答案是肯定的,那麼你的肯定是想用三張表。如果您不這樣做,那麼您將爲屬於同一品牌或同一類別的每件商品重複所有信息。

如果答案是否定的,使用三個表格仍然有一個優勢 - 它可以防止拼寫錯誤或其他拼寫不一致性進入您的數據庫。例如,它會阻止你爲某些商品寫一個品牌爲「可口可樂」,而用其他商品爲「可口可樂」。隨着數據庫的增長,這些不一致性會越來越難以找到和糾正。通過讓每個品牌只在其自己的表格中列出一次,它將始終以相同的方式寫入。

多個表的缺點是你的查詢的SQL更復雜。這肯定是一種折衷,但是如果有疑問,可以將其歸一化爲多個表格。你會知道什麼時候用更多的經驗去規範化會更好。

0

如果您真的希望您的解決方案具有可伸縮性,現在需要解析和分區數據。否則,當解決方案規模擴大時,您將面臨重新構建解決方案的問題。您還將面臨將數據解析並重新分配到新表的問題。因爲如果您打算將Filemaker連接到外部數據源,您還包含SQL和MySQL標記,那麼您肯定需要在結構上將遊戲結構化。

建立在一個表中的一切基本上使用的Filemaker做Excel的工作,如果你要連接到SQL,MySQL和等

自它不會削減它加入表是一個很好的工具。但是,它們只能用於計算小數據點,不應將其用作報告功能的支點或基礎。隨着時間的推移,它可能會失去控制,並且需要保持後端清潔。

使用匯總和小結匯總功能來分割基於產品的數據。

對於零售和一般的產品管理解決方案,無論是的Filemaker/SQL /或任何「品牌」或「賣方」是它自己的表。然後你會有一個「產品」表(匹配鍵是「品牌ID」)。

「產品類別」字段應該是「產品」表中的字段。您可以通過構建標準值列表或根據「產品類別」表構建值列表來管理類別值。第二種情況對長期管理更好。

相關問題