我有存储所有客户信息的 XML。每当我的 PHP 代码运行时,它都会将客户数据从 XML 插入到数据库中。这是表格。不是所有的客户都是web的,所以我把所有的客户信息直接保存到一个名为“customer”的表中。
客户:
customer_id int(40) primary key
CustomerAccountNumber varchar(60)
CustomerAccountName varchar(255)
AccountBalance double
InvAddressLine1 varchar(500)
Rep varchar(20)
为了存储“网络客户”登录名和用户名,我有一个名为“Web_customers”的不同网络帐户表,该表将“CustomerAccountNumber”作为主键。
网络客户:
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 表“客户”中具有相同 Accnt2 的所有其他客户。 注意 我的 XML 中的所有字段都使用插入批处理方法直接插入到客户表中。因为,我的 XML 有超过 60,000,解析和插入数据到子表可能会引发性能问题。这就是为什么,我没有打破它起来,这就是我寻找替代解决方案的原因。
如何防止这种情况发生?在这种情况下我该如何规范化?由于 XML 解析效率和重新加载的原因,有没有一种方法可以在不干扰主 XML 表“客户”的情况下进行规范化?
最佳答案
系统按照您的设计运行。
如果您希望将具有共同帐户代码的每个网络客户视为具有单独账单信息和帐户余额的单独客户,则将客户的所有字段复制到网络客户表中,并且永远不要更改客户表。
我建议你按如下方式重组你的数据库
AccountCode
ID
AccountCode
Customer
ID
AccountCodeID (FK to AccountCode.ID)
AccountBalance
InvAddressLine1
Rep
CustomerUser
ID
CustomerID (FK to Customer.ID)
Email
Pwd
并正确解析您的 XML。
关于php - 如何使用规范化删除冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118184/