我正在设计支付系统。以下哪两种设计更实用,通常实施并被认为是一种良好的做法?
考虑两个实体 - order
和credit_card_details
。
信用卡可能用于支付多个订单。因此,credit_card_details
和order
之间存在1:M的关系。请记住,credit_card_details
中的每条记录都是唯一的,其中包含card_holder_name,cvv,expiry_date等属性。这些记录在付款时填写在表单中。此设计要求无论何时付款,我都需要查找credit_card_details
表以检查是否正在使用新/旧信用卡。如果信用卡是 -
旧:相应的FK被添加到order
表中。
新增:credit_card_details
中添加了新记录,然后将相应的FK添加到order
表
这相对简单。我使用单个order
表,其中来自先前设计的credit_card_details
的所有属性都合并到前一个表中。无论何时下订单,我都不需要检查输入的信用卡详细信息是否存在,我只需将它们插入order
表中即可。但是,它会附带可能重复的信用卡详细信息的费用。
答案 0 :(得分:1)
个人选项1是有道理的,选项2不会给你3NF,并且数据被非规范化,因此你可能有重复的数据。如果客户退回订单并且您想要进行反向付款且卡已过期怎么办?这些只是我抛出的一些常见的曲线球。这完全取决于给定的场景。
另外想象一下,你想要一个与用户相关的所有信用卡的历史记录以及订单???,将这些存储在数据库中的逻辑方法是什么?当然是一张单独的桌子吧?
因此给定用户可能有0到多张卡。 卡可以与1个或多个订单相关联 订单总是与一张卡相关联。
考虑可能的搜索选项,并查找速度,最好在订单表中使用唯一的外键。
第三个选项可能是拥有一个Order表,Card表和OrderCard表,虽然我个人再次依赖于您的域名,虽然我认为选项三可能有点过分了?
希望这有助于您的设计