我有XML,其中存储了所有客户信息。每当我的PHP代码运行时,它都会将XML中的客户数据插入到数据库中。这是表格。并非所有客户都是网络,因此我已将所有客户信息直接保存到一个名为“客户”的表中。
客户:
customer_id int(40) primary key
CustomerAccountNumber varchar(60)
CustomerAccountName varchar(255)
AccountBalance double
InvAddressLine1 varchar(500)
Rep varchar(20)
为了存储“网络客户”登录名和用户名,我有一个名为“Web_customers”的不同网络帐户表,其中“CustomerAccountNumber”作为主键。
Web_customers:
web_id int(11) primary key
UserName varchar(39)
CustomerAccountNumber varchar(39)
EmailAddress varchar(255)
Pwd varchar(70)
customer_type varchar(10)
示例数据:
customer_id CustomerAccountNumber CustomerAccountName AccountBalance InvAddressLine1 Rep
1 Accnt1 Myname1 1098 address1 Mik
2 Accnt2 Myname2 2398 address2 Richi
3 Accnt3 Myname3 2234398 address3 Santa
4 Accnt4 Myname4 2233398 address4 Den
由于我运行PHP脚本以连续重新加载数据,所以customer_id经常更改,这就是为什么我不能在我的另一个表中选择它作为外键的原因:
WEB_CUST:
web_id UserName CustomerAccountNumber EmailAddress Pwd customer_type
1 Accnt1 Accnt1 b@gmail.com 123 simple
2 Accnt212 Accnt2 dj@gmail.com 123 complex
3 Accnt313 Accnt2 asdj@gmail.com 123 complex
4 Accnt315 Accnt2 342j@gmail.com 123 complex
我有两种类型的客户,“简单”和“复杂”。简单客户有一个CustomerAccountNumber,并且在相应的WEB_CUST表中只有一个用户名。
复杂客户是指具有相同帐号的客户。但问题是“复杂”的客户。当用户名为Accnt313和Accnt2的WEB客户更改信息时,它会更新我的XML表“Customer”中具有相同Accnt2的所有其他客户。 注意 我的XML中的所有字段都使用insert batch方法直接插入到customer表中。因为,我的XML有超过60,000,并且解析和插入子表中的数据可能会引发性能问题。这就是为什么,我没有打破它起来,这就是为什么我在寻找替代解决方案。
如何防止这种情况发生?在这种情况下我怎样才能正常化?有没有一种方法可以规范化,而不会因为XML解析效率和重新加载原因而干扰主XML表“Customer”?
答案 0 :(得分:1)
系统正如你设计的那样工作。
如果您希望每个具有公共帐户代码的网络客户被视为具有单独结算信息和帐户余额的单独客户,则将客户的所有字段复制到网络客户表中,并且永远不会更改客户表。
我建议您重新构建数据库,如下所示
AccountCode
ID
AccountCode
Customer
ID
AccountCodeID (FK to AccountCode.ID)
AccountBalance
InvAddressLine1
Rep
CustomerUser
ID
CustomerID (FK to Customer.ID)
Email
Pwd
并正确解析XML。