2011-05-05 98 views
0

我設計了一個涉及多個功能的簡單經銷商網站。用戶可以登錄併爲汽車發佈帖子。具有重複屬性的Mysql表格

帖子可以是新車/二手車:

`new_posts` database has the following fields 
- id 
- title 
- price_from 
- price_to 
- date_submitted 

`used_posts` database has the following 
- id 
- title 
- price_from 
- price_to 
- year_from 
- year_to 
- date_submitted 

注意如何有屬性的重複。我經常遇到這樣的問題,並想知道處理這個問題的最佳方法是什麼。我有數據庫規範化的一般知識,但我可以使用任何幫助,我可以得到。

謝謝

回答

1

有很多選擇,但有兩個核心思想:

  1. 合併表爲一體,並具有對二手車領域是可選
  2. 提取組成vehicle的字段,這就是您的基本表格。然後,您可以創建其他表格 - truckvan,SUV,new, used - 包含字段。然後你需要表加入他們回到您的基地vehicle表。

第一個選項很容易實現,但難以擴展。第二個更復雜,但比例更容易。

就個人而言,我會合並這兩個表。它可能不會給任何DBA留下深刻的印象,但從應用程序的角度來看它是實用的。

+0

這是我想到的解決方案,因爲我需要它來擴展,但基本上你所說的是把所有'車輛'通用的所有字段拿出來放在一個數據庫中。然後用其他表格填寫所有的差異,以後可以加入到主表格中? – 1337holiday 2011-05-05 02:54:27

+1

您應該查找對象關係不匹配,並專門查找基於映射繼承的結構。這個想法與Jason在步驟2中提出的建議類似。 – PhD 2011-05-05 03:04:55

1

這樣的事情呢?

posts 
- id 
- title 
- price_from 
- price_to 
- year_from (nullable) 
- year_to (nullable) 
- date_submitted 
- is_used (yes/no) 
+0

我曾考慮過使用這個,但我的擔心是,如果差異變大,他們將在未來,這仍然是最好的方法?例如。如果我只將字段'images'添加到used_posts。 – 1337holiday 2011-05-05 02:51:11

+1

聽說過YAGNI?你不會需要它。你將來會談論多少?對於圖像表可以使用可爲空的外鍵是否可以?新車的圖像也不值得嗎?你可以只爲新/使用的類型列而不是布爾值。只是一個枚舉。從長遠來看,這將有更好的表現。可以爲空的數據是可以接受的,你的區別只有2列!做最簡單的事情,不要過多地設計。因素在未來發生的可能性很高的方向... – PhD 2011-05-05 03:02:43

+0

是的,你是對的(YAGIN很好!)。我認爲這是我需要去的方式,因爲另一種方法帶有學習曲線。謝謝! – 1337holiday 2011-05-05 03:12:20