我正在尝试为医院病床收费创建一个数据库。关于哪种方法更好,我有点困惑。
哪种方式维护和查询数据库会更容易?
我个人认为第一种方法更好。
approach1
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
提前致谢
答案 0 :(得分:1)
第一个。这样,您就可以使用room_no
作为主键。当它是关系表时,第二个是好的,当它不是主数据时。这基于您的数据库设计。
答案 1 :(得分:1)
简而言之,我会使用选项二。
从关系数据库设计的角度来看,我同意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
此外,从性能的角度来看,您可能会发现选项二随着时间的推移会更好地扩展,因为您可以在查询中更精细,并且它允许您创建更高效的索引。
如果您想为每个房间只提供一种类型的费用,您可以使用[Room_no]和[Payment_Type]列中的复合主键。
答案 2 :(得分:0)
您使用方法2的原因是您要设计数据库以满足要求。
第一个将更容易查询,但第二个将允许您向cash_cashless列添加其他值,虽然您将其重命名为更通用的处理不同类型的东西。
在这种情况下,您的要求可能仅限于这两种现金和无现金,但第二种方法通常用于上述原因。
答案 3 :(得分:0)
我将在一个字段中使用价格并在另一个字段中兑现,以避免在为一次付款创建两行时其他字段的数据重复