Mysql 针对多个复选框的复杂数据库设计

Mysql 针对多个复选框的复杂数据库设计,mysql,sql,database,database-design,entity-relationship,Mysql,Sql,Database,Database Design,Entity Relationship,我目前正在为当地一家医院创建一个网站。我目前面临的问题是:网站有太多的复选框和字段,这些复选框和字段是根据复选框启用/禁用的 这是网站的url: 由于我对数据库几乎没有经验,设计数据库以保存本文档所有数据的最佳方法是什么?在这种情况下,关系数据库可能不是您的最佳选择-这完全取决于数据在系统中的使用方式 简单的选择是为每位患者设计一张(非常宽的)桌子。每个属性都建模为一列;多值属性(复选框)对每个有效选项都有一列,单值属性需要从有效选项列表中进行查找,使用外键对包含有效查找的表进行查找(例如,在患

我目前正在为当地一家医院创建一个网站。我目前面临的问题是:网站有太多的复选框和字段,这些复选框和字段是根据复选框启用/禁用的

这是网站的url:


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

在这种情况下,关系数据库可能不是您的最佳选择-这完全取决于数据在系统中的使用方式

简单的选择是为每位患者设计一张(非常宽的)桌子。每个属性都建模为一列;多值属性(复选框)对每个有效选项都有一列,单值属性需要从有效选项列表中进行查找,使用外键对包含有效查找的表进行查找(例如,在患者表中,您有一个名为
颈领\u id
的列,还有一个名为
颈领\u值的单独表,其中
1-院前,2-到达,3-不需要

这使您能够存储数据,并使用标准SQL高效地查询数据(例如,查找所有带院前颈部项圈到达的患者)。 “如果选择x框,则y框成为必需”逻辑可能存在于应用程序中,而不是您的模式中

但这是一个很难处理的设计——向病历中添加属性是非常重要的。宽表通常是一个不好的迹象

你可能会认为这是一件坏事,然后选择“实体/属性/值”设计。许多堆栈溢出的答案会告诉你这种设计的优点和缺点——谷歌是你的朋友。TL;DR:即使是中等复杂的查询也几乎不可能


相反,您可能会决定将数据存储为文档—大多数数据库引擎都存储JSON和XML,并允许您高效地查询这些数据。它的好处是更易于开发和更改—但您会失去关系模型提供的内置验证。

我认为最好的方法是将其除以第1部分part=1表。1)设计一个表来存储患者信息,例如患者信息。2) 为每个区块设计一个单独的表格。3) 将表Patient的外键保留在步骤2中创建的所有其他表中。4) 如果您不想将患者密钥保留在其他表中,那么您也可以在它们之间创建关系。5) 如果您更喜欢步骤4,则患者密钥必须至少位于步骤2中创建的一个表中