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