设计一个对所有列都有多个值的数据库对象

时间:2013-06-25 14:56:35

标签: database-design

下面的表格模型是我们将给患者填写以存储的实际表格的设计 他们将在初次考试时提供的信息。我被要求设计/建模数据库对象 存储此信息。我确定基本上是这张图片最左侧的字段 (比如“主诉”,“后方等”)作为属性,将成为表中的列。支票 框是这些表的实际值。所有列都可以有多个值(对每个列都有意义) 可以检查多个复选框。)

我基本上已经考虑过两种方法(请记住这一点 我上面展示了更多的专栏,我只决定展示我想要的整个表格的一部分 设计只是展示一个例子):

1)设计一个表,每个属性的每个可能值都有一列。

利弊(在我看来):

  • 这将为我们设计的屏幕选择和保存此表中的数据简单明了。

  • 该表将是一个非常宽的表(其中有近200列)

我是否违反了一些非常基本的数据库设计原则,创建了一个大表,如果屏幕/模板发生变化,会导致问题发生?

2)将所有复选框转到代码表(基本上这些将成为他们自己的实体)

如果我这样做,我现在必须为每个属性(后部,前部)创建一个相关表,并将主表中的一行与每列的每个相关表中的多行相关联。

这将导致每列有多个代码表和一个相关表。 (到目前为止18个相关表格)

如果我遵循这个设计,那么为了显示初始检查的全貌,我将不得不从这里涉及的18个表中选择数据,而忘记更新它们。

我倾向于第一个解决方案,因为它很简单,

第二种解决方案很复杂,我相信我违反了数据库的基本原则 通过将列/属性(后部,前部等)转换为相关的实体来进行设计 表,而这些实际上是属性,应该导致列。我将不得不加入18个桌子 至少如果我想要显示完整的考试图片。

我希望我在这里描绘了我的困境,我需要正确设计这个对象,以上两种方法都是 我能想到的唯一一个,我需要帮助才能做出决定,可能还有另外一面 我甚至没有考虑到。我希望有人之前做过类似的事情,我可以讨论 和他们在一起。

不幸的是,我无法发布一个屏幕图像,这个图像可以更好地了解我所说的内容,因为显示这些数据的屏幕会是这样的,因此我会尝试用文字显示图片:

初始考试表(主表)

attributes/columns              possible values
posterior                       class1   class11   crowded      rotated
anterior                        overbite  open bite    upper     lower
erosion                         spaced  abraded fractured  discolored
bleeding                        normal  light  moderate advanced

enter image description here

2 个答案:

答案 0 :(得分:1)

没有必要重新发明轮子,你需要的是:"Entity–attribute–value model"

答案 1 :(得分:-1)

如果我理解你的问题,你想建立一个属性表来保存属性的所有可能值。

您可以设计这样的属性表。

Attribute
---------
Attribute
Value

主(聚类)键是(属性,值)。您将在Attribute上执行SQL select,并返回所有Value行。

你的行看起来像这样

 Attribute          Value
 ----------------   -----------------
 posterior          class1
 posterior          class11
 posterior          crowded
 posterior          rotated
 anterior           overbite
 ...
相关问题