在两种方法之间更好地设计医院病床收费数据库


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

提前致谢

简而言之,我会使用选项二。

从关系数据库设计的角度来看,我同意 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 种现金和无现金,但出于上述原因,通常使用第二种方法。

我将在一个

字段中使用价格并在另一个字段中使用现金,以避免其他字段的数据重复,以防您为一次付款创建两行