Php 如何使用标准化消除冗余?
我有XML,其中存储了所有客户信息。每当我的PHP代码运行时,它都会将XML中的客户数据插入数据库。这是桌子。并不是所有的客户都是web的,所以我将所有的客户信息直接保存到一个名为“customer”的表中 客户:Php 如何使用标准化消除冗余?,php,mysql,database,normalization,Php,Mysql,Database,Normalization,我有XML,其中存储了所有客户信息。每当我的PHP代码运行时,它都会将XML中的客户数据插入数据库。这是桌子。并不是所有的客户都是web的,所以我将所有的客户信息直接保存到一个名为“customer”的表中 客户: customer_id int(40) primary key CustomerAccountNumber varchar(60) CustomerAccountName varchar(255) AccountBalance
customer_id int(40) primary key
CustomerAccountNumber varchar(60)
CustomerAccountName varchar(255)
AccountBalance double
InvAddressLine1 varchar(500)
Rep varchar(20)
web_id int(11) primary key
UserName varchar(39)
CustomerAccountNumber varchar(39)
EmailAddress varchar(255)
Pwd varchar(70)
customer_type varchar(10)
为了存储“web客户”登录名和用户名,我有一个名为“web_客户”的不同web帐户表,它的主键是“CustomerAccountNumber”
Web\u客户:
customer_id int(40) primary key
CustomerAccountNumber varchar(60)
CustomerAccountName varchar(255)
AccountBalance double
InvAddressLine1 varchar(500)
Rep varchar(20)
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_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的所有其他客户。
注意
my XML中的所有字段都使用insert batch方法直接插入到customer表中。因为,my XML有60000多个字段,解析数据并将数据插入子表可能会引起性能问题。这就是为什么我没有将其拆分,这就是为什么我在寻找替代解决方案
我怎样才能防止这种情况发生?在这种情况下,我如何正常化?由于XML解析效率和重新加载的原因,有没有一种方法可以在不干扰主XML表“Customer”的情况下实现正常化?系统按照您的设计工作 如果希望将具有公共帐户代码的每个web客户视为具有单独账单信息和帐户余额的单独客户,请将所有字段从customer复制到web customer表中,并且永远不要更改customer表 我建议您按如下方式重新构造数据库
AccountCode
ID
AccountCode
Customer
ID
AccountCodeID (FK to AccountCode.ID)
AccountBalance
InvAddressLine1
Rep
CustomerUser
ID
CustomerID (FK to Customer.ID)
Email
Pwd
并正确解析您的XML。此
复杂类型的客户是否不止一个人?i、 e.一组人?我认为您可以将客户类型
从网络客户
移动到客户
表。如果您不允许任何复杂客户用户更改数据,那么如果他们愿意,他们如何更改数据?@DoSparKot。谢谢您的回答。是的。可以将多个用户名分配给同一个帐号。在这种情况下,我需要断开主客户表?如果是,那么我如何使用这两个表进行正常化?is复杂客户
a单人现实?或在多个用户(如公司)之间共享?@DoSparKot。请注意,表“customer”始终基于XML数据刷新。那么是否有必要将customer\u type移动到web\u customer?你能建议plz吗