Mysql 这个数据库是3NF吗?

Mysql 这个数据库是3NF吗?,mysql,sql-server,database,Mysql,Sql Server,Database,我有一个病人数据库,有人问我是否在3NF中。乍一看,我以为是的,但当我更好地看了看占领表格时,我改变了主意。我将尽可能多地解释数据库 主关键字是(W\u id,H\u id) 最后一个表让我改变了对数据库规范化的想法。此表显示了每个患者在特定日期进入哪个医院的哪个病房的时间。主键也是可疑的,它是所有列,甚至是输入日期 这个数据库是这样给我的,有这些表和它们的主键。表“ward”的模式似乎不在2NF中。W_id似乎决定了Wname 在2NF中,不属于主键一部分的每个属性不能仅由主键的一部分

我有一个病人数据库,有人问我是否在3NF中。乍一看,我以为是的,但当我更好地看了看
占领
表格时,我改变了主意。我将尽可能多地解释数据库

主关键字是(
W\u id
H\u id

最后一个表让我改变了对数据库规范化的想法。此表显示了每个患者在特定日期进入哪个医院的哪个病房的时间。主键也是可疑的,它是所有列,甚至是输入日期

这个数据库是这样给我的,有这些表和它们的主键。

表“ward”的模式似乎不在2NF中。W_id似乎决定了Wname

在2NF中,不属于主键一部分的每个属性不能仅由主键的一部分确定。它只能由整个主键决定


不在2NF中的架构不能在3NF中。因此,此数据库模式不在3NF中。

我已经处理了许多医疗保健应用程序,我将对该模式进行以下更改

病房表

将标识字段添加到Wards表中,使其成为主键,在H_ID和W_ID上创建唯一约束

占用表格

在桌子上

使用Ward表中的Identity列作为参考键,显然是患者的p_ID

datetime列,用于记录入院或出院的日期时间
记录事件类型的另一列,如(入院、出院、出院到另一病房等)引用事件类型中的另一列

为“占用表”中“事件类型”列引用的事件类型创建另一个表

EventTypeID   EventTypeDescription
    1          Admission 
    2          Discharged 
    3          Discharged to Another Ward

对这是3NF。患者不能在同一天两次“进入”同一病房。是的,关于病房表,你是对的。我没有注意到威尔解释说,我现在可以看到了。而且因为这是医疗数据,所以永远不会删除任何数据(英国标准,可能与其他国家不同),但您仍然可以进行软删除,在所有表中添加一个列
deleted
。将其默认值设置为
0
,当您想要删除(软删除)一行时,只需将其值设置为
1
。创建一个筛选索引,其中deleted=0,所有查询都应该具有类似where deleted=0的内容。