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

时间:2014-11-17 09:31:37

标签: php mysql

我正在尝试为医院病床收费创建一个数据库。关于哪种方法更好,我有点困惑。

哪种方式维护和查询数据库会更容易?

我个人认为第一种方法更好。

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

提前致谢

4 个答案:

答案 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)

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