Sql 表示多种付款方式

Sql 表示多种付款方式,sql,oracle,database-design,Sql,Oracle,Database Design,我的情况是,客户可以通过信用卡或贝宝账户付款。我目前有一个超级类“customer”,它有两个子类型“public”和“commercial”。但是,这两种类型都可以通过任何一种支付方式进行支付,并且都有多个与之关联的信用卡/贝宝账户 我有一个当前的模式,可以工作,但不是有多张卡等。我最终需要能够查询哪些客户以什么方式支付。例如,一段时间内有多少客户通过信用卡付款 模型减去付款明细后看起来类似于: [ORDER]-[CUSTOMER]-[D]-[PUBLIC][COMMERCIAL]在SQL中调

我的情况是,客户可以通过信用卡或贝宝账户付款。我目前有一个超级类“customer”,它有两个子类型“public”和“commercial”。但是,这两种类型都可以通过任何一种支付方式进行支付,并且都有多个与之关联的信用卡/贝宝账户

我有一个当前的模式,可以工作,但不是有多张卡等。我最终需要能够查询哪些客户以什么方式支付。例如,一段时间内有多少客户通过信用卡付款

模型减去付款明细后看起来类似于:


[ORDER]-[CUSTOMER]-[D]-[PUBLIC][COMMERCIAL]

在SQL中调用这种查询应该不会有问题。如果您添加了支付账户和PAYPAL_账户以及Credit Card_账户的表格,那么您需要将它们与客户和订单关联,而不是与公共或商业关联

您可以在SQL中使用左联接来显示不包含每个表的行。这将用null填充表中的字段,例如,当它是来自公共帐户的订单时,您查看商业表

SELECT * from ORDER o
INNER JOIN CUSTOMER c on c.ID = o.CustomerID
LEFT JOIN PUBLIC p on p.CustomerID = c.ID
LEFT JOIN COMMERCIAL co on co.CustomerID = c.ID
LEFT JOIN PAYPAL_ACCOUNT pa on pa.ID = o.PaypalAccountID
LEFT JOIN CREDITCARD_ACCOUNT cc on cc.ID = o.CreditCardAccountID
然后可以在末尾添加where子句来缩小范围

WHERE o.PaypalAccountID is not null

当你说关联这两个表(因为我已经有了它们)时,你建议怎么做?包括客户和订单之间的链接表。。。比如说,连接到信用卡和贝宝的付款@Tomeschi如果它在您所在的平台上运行良好,我会在订单中添加两个字段,一个是PaypalID,另一个是CreditCardID,只需填写相应的字段,另一个字段为空。将这些字段设置为PAYPAL_帐户和CREDITCARD_帐户ID字段的外键。我已经考虑过这个概念,但是,我不喜欢接受空值的想法,并且在DB的所有其他表中都避免了它。付款方式必须与客户和订单有关系。当他们有多个卡/贝宝账户时,我可以在表中重复客户id@如果您不想使用空值,可以将该顺序设置为默认值-1,作为它可能拥有的两个不同帐户的ID值。