【问题标题】:How to Remove redundancy using normalisation?如何使用规范化删除冗余?
【发布时间】:2013-02-13 14:52:26
【问题描述】:

我有存储所有客户信息的 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 表“客户”中具有相同 Accnt2 的所有其他客户。 注意 我的 XML 中的所有字段都使用插入批处理方法直接插入到客户表中。由于我的 XML 有超过 60,000 个,并且将数据解析和插入子表可能会引发性能问题。这就是为什么,我没有打破它起来,这就是为什么我正在寻找替代解决方案。

如何防止这种情况发生?在这种情况下如何正常化?由于 XML 解析效率和重新加载原因,有没有一种方法可以在不干扰主 XML 表“客户”的情况下进行规范化?

【问题讨论】:

  • 这个complex类型的客户不止一个人?即一群人?
  • 我认为您可以将 customer_typeweb_cust 移动到 customer 表。如果您不允许任何复杂的客户用户更改数据,那么他们如何更改数据?
  • @DoSparKot。感谢您的回复。是的。可以将多个用户名分配给同一个帐号。在这种情况下,我需要打破主客户表?如果是这样,那么我如何使用这两个表进行规范化?
  • complex customer 是一个人的现实吗?还是像公司一样在多个用户之间共享?
  • @DoSparKot。请注意,表“customer”一直根据 XML 数据刷新。那么将 customer_type 移动到 web_customer 有什么意义吗?你能告诉PLZ吗

标签: php mysql database normalization


【解决方案1】:

系统按照您的设计运行。

如果您希望将具有共同帐户代码的每个网络客户视为具有单独帐单信息和帐户余额的单独客户,则将客户的所有字段复制到网络客户表中,并且永远不要更改客户表。

我建议您按照以下方式重组数据库

AccountCode
    ID
    AccountCode


Customer
    ID
    AccountCodeID   (FK to AccountCode.ID)
    AccountBalance
    InvAddressLine1
    Rep

CustomerUser
    ID
    CustomerID    (FK to Customer.ID)
    Email
    Pwd

并正确解析您的 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2012-07-29
    相关资源
    最近更新 更多