我正在尝试为医院病床收费创建一个数据库。我对哪种方法更好有点困惑。
哪种方式更容易维护和查询数据库?
我个人觉得第一种方法更好。
方法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
提前致谢
简而言之,我会使用选项二。
从关系数据库设计的角度来看,我同意 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] 列中的复合主键。
第一个。这样,您就可以将room_no
用作主键。第二个很好,当它不是主数据时,当它是一个关系表时。这基于您的数据库设计。
使用方法 2 的原因是,如果要设计数据库以根据需求进行扩展。
第一个将更易于查询,但第二个将允许您向cash_cashless列添加其他值,尽管您可以将其重命名为更通用的值以处理不同的类型。
在这种情况下,您的要求可能仅限于这 2 种现金和无现金,但出于上述原因,通常使用第二种方法。
我将在一个
字段中使用价格并在另一个字段中使用现金,以避免其他字段的数据重复,以防您为一次付款创建两行