sql - 医生、患者以及双方的联系信息

标签 sql sql-server

我有两个表DOCTORSPATIENTS。我希望医生和患者都有不固定的联系信息(例如电话号码、地址等)。例如,我们可以为医生或患者添加多部电话。

我考虑过创建一个单独的表,例如PHONES 包含字段 phoneID、电话号码和指向联系人的外键,如下所示:

电话

phoneID [pk]
number
contactID [fk]

医生

docID [pk]
fname
sname
specialization
.
.
.

患者

patID [pk]
fname
sname
.
.
.

第一个问题来自于 patIDdocID 可能(并且最终)具有相同的值这一事实。因此,将一部手机与一个且仅一个人联系起来变得更加困难。

到目前为止,我想到了三种可能的解决方案:

  1. 为医生和患者提供自定义格式的主键。例如,医生的 ID 可以是“d00001”、“d00002”等形式,而患者的 ID 可以是“p00001”、“p00002”等形式。我担心这可能会使事情变得不必要的复杂化。

  2. 另一种解决方案是将医生和患者放在一个表中,并使用另一个字段来定义他们是医生还是患者。

  3. 为医生和患者创建单独的 PHONE 表,但这更加笨拙。

不知何故,我认为这两种方法都不是最好的。有什么建议吗?

最佳答案

您可以引入一个PERSON表。这与您的医生和患者1:1相关(之后可能与员工、供应商、机构等相关)。让联系人与此人员表相关。

应用程序代码可以很容易地通过继承对此进行建模...

在您的人员表中,您可以保存一些常规信息,例如 DisplayNamePersonType(引用具有 Doctor 等条目的人员类型表>、患者 和 ...)。

保持这张 table slim ......

如果非要从自己的想法中做出选择,我更喜欢第二个。将它们放在一张表中并用类型列标记它们。避免说出按键...

关于sql - 医生、患者以及双方的联系信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706584/

相关文章:

php - mysql 中的总页面浏览量

SQL 连接加倍一些输出

sql - 确定字符串是否包含子字符串的用户定义函数

sql - 事务中 GO 命令的奇怪行为

MYSQL 对组中的项目进行排序,然后对组进行排序

mysql - 插入行时如何更新触发器?

sql-server - 日期转换和文化 : Difference between DATE and DATETIME

sql-server - 通过 Azure 资源管理器从公共(public) blob 将 .bacpac 导入到 SQL Azure

mysql - 查找其他人查看的前 N ​​个产品(在 MySQL 中)

python - 在 django 上应用迁移时出现 "relation "Social_auth_code "does not exist"