MySQL:一对一关系表合并

时间:2018-02-17 07:03:38

标签: mysql database database-design

我正在尝试简化应用程序的数据库。在该数据库中,我有两个表,让我们说PatientMedicalRecord。我知道,如果来自Table-A的任何给定行可以at most一行Table-B,则表示两个表是一对一的关系(这意味着可能存在零匹配)。

但就我而言,它不是at most,而是exactly。即Patient中的每一行exactly中都应有MedicalRecord行(没有病历,没有病历)。

Patient表包含患者的所有个人详细信息,其身份为PKMedicalRecord talbe的详细信息包括他的血型,血红蛋白,bp等,PKFK Patient的身份。

我的问题是,我可以合并这两个表并创建一个表,如

PatientDetails:personal_details和血型,血红蛋白,bp等

2 个答案:

答案 0 :(得分:1)

如果两个表对于共享的一组列具有相同的子行值集(两者都是超级键(SQL PRIMARY KEY或UNIQUE)),则可以通过其自然连接替换这两个表。 (“自然连接”可能就是“合并”的意思,但这不是一个定义的技术术语。)每个原始表将等于原始列上连接的投影。

(1:1表示双方总数,并不代表1:0或1,尽管大多数关于基数的写法都是草率和不清楚。)

答案 1 :(得分:1)

"沸点" ="血压"?然后你必须组合表格。相反,它是1:多 - 每个患者可以有多组读数。记录和绘制读数趋势非常重要。

"styles": [ "../node_modules/ngx-bootstrap/datepicker/bs-datepicker.css, ... ], - 名称,生日(年龄;计算那个),性别,种族(某些种族比其他种族更容易患某些疾病)中只放置真正恒定的值,而不是身高/体重。等

当然,患者可能会更改名称(婚姻,法律诉讼等),但这是一个不会影响架构设计的例外情况,除非强迫您使用Patient,而不是{{1作为唯一的密钥。

每位患者都必须有patient_id?那是"业务逻辑&#34 ;;在应用程序中测试它;不要依赖(在这种情况下)数据库中的任何内容。

两个表都有patient_nameMedicalRecord会将其作为patient_id; Patients INDEXed`。只需要1:很多就可以了。

在表格真的是1:1(可选1:0/1)的情况下,我建议合并表格。 (也有例外。)