许多复选框的复杂数据库设计

时间:2017-03-09 08:40:50

标签: mysql sql database database-design entity-relationship

我目前正在为当地医院创建一个网站。我目前面临的问题:网站包含太多的复选框和启用/禁用的字段,具体取决于复选框。

这是网站的网址:http://ali.ezyro.com/adan/myForm.php

由于我对数据库的经验不足,设计数据库以保存此文档的所有数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:-1)

这种关系数据库可能不是您的最佳选择 - 这一切都取决于数据在系统中的使用方式。

直截了当的选择是为每位患者设计一张(非常宽)的桌子。每个属性都被建模为一列;多值属性(复选框)每个有效选项都有一列,需要从有效选项列表中查找的单值属性使用外键来保存有效查找的表(例如,在患者表中,您有一个名为cervical_collar_id的列,您有一个名为cervical_collar_values1 - prehospital, 2-on arrival, 3-not required}的单独表格。

这允许您存储数据,并使用标准SQL有效地查询数据(例如,查找所有带有院前颈托的患者)。 "如果您选择框x,则框y成为必填项"逻辑应该存在于应用程序中,而不是模式中。

但这是一个难以设计的设计 - 为患者记录添加属性并非易事。宽表通常是一个不好的标志。

你可能认为这是一件坏事,并且去了" entity / attribute / value"设计。很多Stack Overflow的答案会告诉你这个的好处和缺点 - 谷歌是你的朋友。 TL; DR:即使是中等复杂的查询也几乎不可能。

您可能决定将数据存储为文档 - 大多数数据库引擎存储JSON和XML,并允许您有效地查询此数据。它具有易于开发和更易于更改的优点 - 但是您失去了关系模型为您提供的内置验证。