2012-08-30 134 views
4

說我有兩個表(蘋果和桔子)具有相同的列和只是一個不同的表名。將這個表格轉換成一個表格(可以說它叫做水果)是否有任何優點/缺點,還有一個額外的'類型'列,然後可以存儲Apple或Orange的值?具有相同列的兩個表或具有附加列的一個表?

編輯澄清:

CREATE TABLE蘋果 ( ID INT, 重量INT, 各種VARCHAR(255) )

CREATE TABLE桔子 ( ID INT, 重量INT, variety varchar(255) )

CREATE TABLE水果 ( ID INT, 重量INT, 品種爲varchar(255), 類型ENUM( '蘋果', '橙') )

+0

你是什麼意思。你可以用一個數據庫例子來問這個問題嗎? – 2012-08-30 15:35:57

+0

@CihanKüsmez增加了一個例子 – Tesla

回答

3

的約束取決於:

  • 你對​​外鍵或檢查不存在的oranges(反之亦然)?
  • 您是否需要在兩個表中保留鍵唯一(所以沒有apple可以具有與某些orange相同的ID)?

如果這兩個問題的答案是:「是」「不」,保持表分開(這樣的限制可以製成表格,具體)。

如果答案是:「不」「是」,合併在一起(這樣你可以箱子跨兩個關鍵)。

如果答案是:「是」「是」,考慮仿效繼承:

enter image description here


Lookup data是一個典型的例子表看起來相似,但必須保持獨立,因此FK可以保持分開。

具體地,這是戰略「在單獨的表中的所有類」表示繼承(又名。類別,子類,子類型化,泛化層級等)。您可能需要查看this post瞭解更多信息。

1

如果真的沒有任何進一步的業務規則(以及由此產生的底層數據需求)將兩個子類型分開,然後我將一個帶有fk的表用於FruitType查找表。

您不會提及您將使用什麼來訪問可能影響您採用哪種方法的模式(例如,如果您正在使用向您的數據庫提供ORM的平臺,那麼這可能值得注意)。

+0

是的,我很可能會使用一個ORM,我猜這個ORM有利於兩個不同的表? – Tesla

0

優點是正常化。你的表格將在2NF(second normal form)。 你的水果type將是一個外鍵的表與水果,像這樣:

CREATE TABLE fruit_type (type varchar(15)) 

CREATE TABLE fruits (id int, weight int, variety varchar(255), type varchar(15)) 
相關問題