Php 如何使用标准化消除冗余?

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

我有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_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吗