[英]Better design of database for Hospital Bed charges between two approaches
我正在尝试创建一个用于医院病床收费的数据库。 对于哪种方法更好,我有点困惑。
哪种方法更容易维护和查询数据库?
我个人认为第一种方法更好。
方法1
room_no charges_cash charges_cashless
MG1 300 400
MG2 400 500
方法2
room_no charges cash_cashless
MG1 300 cash
MG1 400 cashless
MG2 400 cash
MG2 500 cashless
提前致谢
第一个。 这样,您可以将room_no
用作主键。 第二个很好,当它不是主数据时,当它是关系表时。 这基于您的数据库设计。
简而言之,我将使用选项二。
从关系数据库设计的角度来看,我同意Flosculus,好像您希望将来增加其他类型的收费(例如,将无现金方式分为信用卡,Paypal,Worldpay等),然后在选项一中,您需要进行更改模式,但是在第二种方法中您没有; 只是在cash_cashless中使用不同的值(并且可能将该列重命名为“ payment_type”或其他内容?)
例如:
客房表
Room_No Room_Name Other_Columns
MG1 Room One *
MG2 Room Two *
收费表
Charge_ID Room_no Charge Payment_Type
1 MG1 300 cash
2 MG1 400 cashless
3 MG2 400 cash
4 MG2 500 cashless
5 MG2 450 cheque
6 MG2 600 creditcard
同样,从性能的角度来看,您可能会发现选项2随着时间的推移会更好地扩展,因为您可以在查询中获得更细粒度的信息,并且可以创建更有效的索引。
如果您只想为每个房间提供一种收费类型,则可以使用[Room_no]和[Payment_Type]列中的复合主键。
使用方法2的原因是,如果要设计数据库以根据需求进行扩展。
第一个将更易于查询,但是第二个将使您可以向cash_cashless列添加其他值,尽管您可以将其重命名为更通用的名称来处理不同的类型。
在这种情况下,您的要求可能仅限于这两种现金和无现金方式,但是由于上述原因,通常使用第二种方法。
我将在一个字段中使用价格,在另一个字段中兑现,以免在您为一次付款创建两行的情况下避免另一字段的数据重复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.