我有一个表Costumers
和另一个CostumersPayments
。
在CostumersPayments
我有付款方式(MB,Visa等)。
我的问题是,每个客户都可以有多个付款,所以我无法创建一个名为“IDPayment”的字段,我在其中设置了该付款的ID,而且我不知道我将支付多少付款(管理员可以添加或删除)。
您如何建议我将付款ID存储在表格Costumers
中?创建一个我将它们存储为数组的字段? (“1,2,3”用逗号分隔)。
由于
答案 0 :(得分:3)
这基本上是many-to-many
关系。客户可以有许多支付类型,并且可以从许多客户使用一种支付类型。只需要一个表格Costumers
,表格PaymentTypes
和表格CostumersPayments
。此表格有两列 - CostumerID
和PaymentTypeID
。这将是一个复合主键(两列中的)。
CostumerPayments
| CostumerId | PaymentTypeId |
------------------------------
| 1 | 3 |
| 1 | 4 |
| 2 | 3 |
| 2 | 5 |
------------------------------
编辑:您将ids
存储在一行中的初始命题(以逗号分隔)是数据库设计中最大的罪行之一。它甚至违反了第一种正常形式。查看here了解更多信息。
答案 1 :(得分:1)
在上面的描述中,听起来更像是每个客户可以进行多次付款。
在这种情况下,Payments表只需要在每行中都有CostumerID吗?
- 编辑: 你可能想要3张桌子。客户,付款和PaymentTypes(我试图明确我的表名)。
在PaymentTypes中,您有ID和名称。在付款中,存储CostumerID和PaymentTypeID。
答案 2 :(得分:1)
创建我存储它们的字段 像一个数组? (“1,2,3”分隔 引号)。
这会破坏关系数据库的normalization rules。不要做这样的事情。
答案 3 :(得分:1)
首先,如前所述,绝对不要在单个字段中存储多个值。正如其他人所描述的那样,出于许多原因,这是一个坏主意。
其次,我不清楚CostumerPayments表中包含的内容。这是个人付款(有金额)是由客户做出的吗?这些付款中的每一种都有与之相关的付款方式吗?
如果是这种情况,您需要以下表格:
要查找客户的所有付款,请查看CostumerPayments表WHERE CostumerID =<>。要在同一查询中获取客户信息和付款,请加入两个表Costumers和CostumerPayments。要查找付款类型的正确名称,请同时加入PaymentTypes表。
或者,如果您的目标是存储允许每个客户使用的PaymentTypes列表(不是引用金额,只是允许客户使用的事实,例如VISA卡)添加表格:< / p>
CostumerAllowedPaymentTypes,将外键CostumerID和PaymentTypeID放入各自的表中。
答案 4 :(得分:0)
您使用三张桌子。将客户信息存储在“客户”表中,并将CustomerId作为主键。将付款存储在“付款”表中,并将PaymentId作为主键。然后使用名为“CustomerPayments”的连接表,其主键为CustomerId和PaymentId 您不应将CustomerIds存储在Customer表中作为逗号分隔值。那不是规范化的数据库。见http://en.wikipedia.org/wiki/First_normal_form
坦率地说,我希望您不负责根据您的经验开发商业业务解决方案。
答案 5 :(得分:0)
在CostumersPayments中只有一个CustomerID列,并将其作为对客户的引用。
如果您想要检索客户的付款,只需加入表格。