Php 两种方法间病床收费数据库的优化设计
我正在尝试创建一个医院床位收费数据库。对于哪种方法更好,我有点困惑 哪种方式更容易维护和查询数据库 我个人认为第一种方法更好 方法1Php 两种方法间病床收费数据库的优化设计,php,mysql,Php,Mysql,我正在尝试创建一个医院床位收费数据库。对于哪种方法更好,我有点困惑 哪种方式更容易维护和查询数据库 我个人认为第一种方法更好 方法1 room_no charges_cash charges_cashless MG1 300 400 MG2 400 500 方法2 room_no charges cash_cashless MG1 300 cash MG1 400 cas
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
先谢谢你第一个。这样,您就可以使用
房间号
作为主键。第二个是好的,当它不是主数据时,当它是一个关系表时。这取决于您的数据库设计。使用方法2的原因是,如果您设计的数据库是根据需求进行扩展的
第一个将更易于查询,但第二个将允许您向cash\u cashless列添加其他值,尽管您可以将其重命名为更通用的名称以处理不同的类型
在这种情况下,您的要求可能仅限于这两种现金和无现金,但出于上述原因,通常使用第二种方法。我将在一个字段中使用价格,在另一个字段中使用现金,以避免在您为一次付款创建两行时重复其他字段的数据。简言之,我将使用选项二 从关系数据库设计的角度来看,我同意Flosculus的观点,好像你想在将来增加额外类型的费用(例如,将无现金分成信用卡、Paypal、Worldpay等),那么在选项一中,你需要改变模式,但在选项二中你不需要;只需在cash\u cashless中使用不同的值(也许可以将该列重命名为“payment\u 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]列中的复合主键。我个人推荐方法1,因为它需要更少的行数,并且更容易在room_no上执行联接,这取决于您的数据模型。“现金”和“无现金”是否始终是必需的数据点,必须始终附加到一行?那么,将其设置为列是一件合乎逻辑的事情。否则,如果房间与这些费用之间的关系更为动态,那么用另一种方式来处理可能是有意义的。呃。有人对医院预约收费吗?