2013-02-27 72 views
5

我有存儲所有客戶信息的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    [email protected]  123  simple 
    2  Accnt212 Accnt2    [email protected] 123  complex 
    3  Accnt313 Accnt2    [email protected] 123  complex 
    4  Accnt315 Accnt2    [email protected] 123  complex 

我有兩種類型的客戶,「簡單」和「複雜」。簡單的客戶有一個CustomerAccountNumber,並且在相應的WEB_CUST表中只有一個用戶名。

複雜的客戶是指那些具有相同帳號的客戶。但問題是「複雜」的客戶。當使用用戶名Accnt313和Accnt2的WEB客戶更改信息時,它會更新我的XML表「客戶」中具有相同Accnt2的所有其他客戶。 注意 我的XML中的所有字段都使用插入批處理方法直接插入到客戶表中。因爲我的XML有超過60,000個,並且將數據解析並插入到子表中可能會產生性能問題。因此,我沒有打破它,這就是爲什麼我正在尋找替代解決方案。

我該如何防止這種情況發生?我如何在這種情況下正常化?有沒有一種方法可以在不影響XML解析效率和重新加載原因的主要XML表「客戶」的情況下正常化?

+0

這個「複雜」類型的客戶不止一個人?即一羣人? – SparKot 2013-02-28 08:05:32

+0

我想你可以將'customer_type'從'web_cust'移動到'customer'表。如果您不允許任何複雜的客戶用戶更改數據,那麼他們如何改變數據? – SparKot 2013-02-28 08:08:46

+0

@ DoSparKot.Thanks for your response.Yes.Multiple username can be assigned to same account number.I need to break the main customer table in this case?如果是這樣,那麼我怎樣才能使用兩個表進行標準化? – BiL 2013-02-28 08:15:31

回答

1

系統按照您的設計工作。

如果您希望每個具有普通帳戶代碼的網絡客戶都被視爲具有單獨帳單信息和帳戶餘額的獨立客戶,則將客戶的所有字段複製到網絡客戶表中,並且永不更改客戶表。

我建議你調整你的數據庫如下

AccountCode 
    ID 
    AccountCode 


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

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

和正確解析您的XML。