我正在Access 2016中创建一个药房数据库。这是我的学校项目,也是第一个数据库项目。
我的第一个问题是,我们知道药剂师可以有很多患者,因此这意味着药剂师与患者之间的关系是一对多的。因此,为了创建一对多关系,我将Pharmacist_ID
作为主键。
现在的问题是,我们知道地址和患者的关系是一对一的,那么我该如何完成这项任务?
另一个问题是我已经有了与Pharmacist_ID
链接的地址,城市和国籍。我可以用Patient_ID
链接这些表吗?
我很困惑,因为Pharmacist_ID
的数据类型是Auto-Number
。第一位患者的Patient_ID
将为1,然后第一位药剂师的Pharmacist_ID
也将为1,那么会发生什么?
同样,我正在使用MS-Access 2016。 This is the Picture of The RelationShip and you can see the Details of my Tables
此致
Arslan Iftikhar
This is for Thomas G check it out Thomas do you think I am doing right or wrong
答案 0 :(得分:0)
我将对“地址”表进行以下更改:
City
和Nationality
(为简单起见,请像下面的图片2一样链接它们)PID
中添加了数字,您可以在其中保存药剂师或患者ID Ptype
中添加了字段flush
作为“药剂师”时保存值1的数字和“患者”时保存值2的数字,因此我们可以使用此字段轻松区分。图片2
答案 1 :(得分:0)
您的方法中存在一些设计错误。 我将列出一些我想的事情,并尝试训练您提出正确的问题。
我的第一个问题是,我们知道药剂师可以拥有许多 患者,所以这意味着药剂师和 病人是一对多的
第一部分仅部分正确,这会使第二部分不正确,并可能导致较大的设计失败。
在正常世界中:
不是吗?
因此,您之间具有亲密关系。您如何解决呢?带有存储患者和药剂师之间关系的中间表。
唯一的例外是,如果您只为一名药剂师制作软件,则您的1-to-m方法将起作用,但是我看不出有任何Pharmarcist表的原因:)
现在的问题是,我们知道地址和 病人是一对一的,我该如何完成这项任务?
您真的确定吗?那么在这种情况下会发生什么:
这些是非常常见的情况。如果您使用1-1,那么您的地址表中将会有很多双打。
我们几乎总是将地址放在单独的表中的真正原因是地址在信息系统中很少是一对一的。如果是一对一的,则没有真正的理由将它们存储在其他表中。
我很困惑,因为Pharmacist_ID的数据类型是自动编号。 第一个患者的Patient_ID将为1,然后是Pharmacist_ID 的第一位药剂师也会1那么会发生什么呢?
这是一个很好的问题,它应该导致您遇到上述设计错误。地址和其他内容(患者或药剂师)之间不应有1-1。
在“患者和药剂师”表中,您应该具有一个AddressID,该ID引用地址表中的ID。如果您想让法老主义者有机会进行存储:
您应该:
编辑。您对新模型的反应。
我想您的CITY表的要点是要列出很多城市?您可以用于组合框吗?如果采用这种方式,则可能会对国家或州/地区执行相同的操作。很好,但是:city_id(以及最终的State_ID和Country_ID)应该是ADDRESS表的一部分。仅包含街道,门牌号码和邮政信箱的地址没有意义。这是不完整的,地址中还应该包含邮政编码,完整的城市和国家/地区。