下面的表格模型是我们将给患者填写以存储的实际表格的设计 他们将在初次考试时提供的信息。我被要求设计/建模数据库对象 存储此信息。我确定基本上是这张图片最左侧的字段 (比如“主诉”,“后方等”)作为属性,将成为表中的列。支票 框是这些表的实际值。所有列都可以有多个值(对每个列都有意义) 可以检查多个复选框。)
我基本上已经考虑过两种方法(请记住这一点 我上面展示了更多的专栏,我只决定展示我想要的整个表格的一部分 设计只是展示一个例子):
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
答案 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
...