请求有关数据库设计的反馈

时间:2016-01-22 17:25:17

标签: sql-server database database-design

我正在建立一个用于圣诞树种植操作的数据库。我把我认为的一个可行的架构放在一起。我希望得到一些人的反馈,我没有人。你是我唯一的希望。

所以,有3个不断增长的地块,我们称之为果园。每个果园都有行和列,每个行/列交叉点可以有零个或一个树,种植在其中。行/列是数字和字母,因此第3行,第f列等。每个行/列交集都有一个状态(空,正在使用中)。树可以是不同的物种(由手动创建的GID {遗传ID}表示),修饰(具有不同的物种嫁接),或移动到不同的位置。因此,植物可以有一个或多个位置,一个位置可以通过历史记录包含一棵或多棵树,但一次只能包含一棵树。

这是我放在一起的图表:

enter image description here

2 个答案:

答案 0 :(得分:1)

  

所以我在考虑历史目的,我会用   地理位置表。你觉得没必要吗?

不,但在这种情况下,您应该在树位置表中获得有关树的位置的信息。例如" MovedYear"。如果一棵树多次移动,你不想保留每次移动的年份,而不是每棵树只移动一次MovedYear吗?

按照您的方式创建历史记录表没有问题,但是现在,如果TreeId 1位于3个不同的位置,您如何查询数据库以查看它现在在哪个位置?你所看到的只有:

TreeId LocationId
1      1
1      2
1      3

你不知道动作发生的顺序。 (除非你有一些业务规则,说树只能从1移动到2,从2移动到3,并且永远不会遵循任何其他顺序)。

解决此问题的常用方法是在历史记录表中使用StartDate和EndDate。

答案 1 :(得分:0)

它接缝

  

工厂可以有一个或多个地点

不,工厂有 位置,但可以移动 为了实现这一点,我们需要

  • 在Tree表中有位置外键(FK),显示当前树位置。
  • 此FK必须是强制性的(公开 a
  • 为了防止多个树具有相同的位置,我们需要在此FK列上具有唯一的键约束。

植物可以移动,因此可以追踪植物的位置历史

  • 我们需要一个工厂位置历史表
  

每个行/列交叉点都有一个状态(空,正在使用中)

因此,交叉点状态可以具有预定义的有限值。

  • 我们需要LocationStatus表吗?我不这么认为。 status可以是locatin表中的静态字段,其检查约束为(1 =空,2 =使用中,3 = ETC)

enter image description here