2016-01-22 29 views
-2

我正在構建聖誕樹種植操作的數據庫。我已經放在一起,我相信是一個可行的模式。我希望得到一些人的反饋,我沒有人。你是我唯一的希望。請求關於數據庫設計的反饋

因此,有3個成長的地塊,我們將他們稱爲果園。每個果園都有行&列,每行/列交叉點可以有零樹或一棵樹,種植在其中。行/列是數字和字母,所以第3行,第f列等。每個行/列交叉點都有一個狀態(空的,正在使用中)。一棵樹可以是不同的物種(由人工創建的GID {遺傳ID}表示),修飾的(具有嫁接的不同物種)或移動到不同的位置。因此,一個工廠可以有一個或多個位置,並且一個位置可以通過歷史包含一棵或多棵樹,但一次只能包含一棵。圖我放在一起

這裏是:

enter image description here

+0

你真的需要TreeLocation? TreeId可以同時擁有多個位置嗎? –

+0

一棵樹一次只能在一個點上,但它可以移動到不同的位置。所以我在考慮歷史的目的,我會使用treelocation表。你認爲這是沒有必要的嗎? – BattlFrog

回答

1

所以我想對歷史的目的,我會用 treelocation表。你認爲這是沒有必要的嗎?

不,但在這種情況下,您應該獲得與樹位置表中樹的位置有關的信息。例如「MovedYear」。如果一棵樹移動多次,你不想保留每個移動的年份,而不是每棵樹只有一個MovedYear?

它的優良有一個歷史表你的方式做,但現在,如果TreeId 1已經在3個不同位置,你怎麼可以查詢數據庫,看看它在現在哪個位置?所有你會看到的是:

TreeId LocationId 
1  1 
1  2 
1  3 

你將不知道這些舉動發生的順序。 (除非你有一些業務規則,說樹只能移動從1到2和從2到3,從不追隨任何其他順序)。

通常的辦法來解決,這是有一個起始日期日期和結束日期在歷史表中。

+0

聽起來不錯,我可能會保留表格,移動'MovedYear'字段並添加開始/結束日期字段。其餘的看起來如何? – BattlFrog

+0

我沒有看到任何其他明顯的問題。 :) –

0

它接縫

的植物可以有一個或多個地點

沒有,植物有一個位置,但它可以移動。
爲了獲得這一點,我們需要樹表內

  • 有無位置外鍵(FK),顯示當前樹中的位置。
  • 這FK需要強制性的(暴露有一個
  • ,防止發生,我們需要對這個FK列唯一鍵約束同一位置的多個樹。

植物可以移動,所以跟蹤一個工廠位置歷史

  • 我們需要一個工廠位置歷史記錄表

每一行/列交叉都有一個狀態(空的,正在使用)

所以十字路口狀態可以有預定義的限定值。

  • 我們是否需要LocationStatus表?
    我不這麼認爲。狀態可以是locatin表內的靜態字段的檢查約束(1 =空,2 =在使用中,3 = ETC)

enter image description here