2013-02-27 18 views
5

Mam XML, w którym przechowywane są wszystkie informacje o klientach. Ilekroć mój kod PHP działa, wprowadza dane klienta z XML do bazy danych. Oto tabela. Nie wszyscy klienci są stronami internetowymi, więc zapisałem wszystkie informacje o kliencie bezpośrednio w jednej tabeli o nazwie "klient".Jak usunąć nadmiarowość za pomocą normalizacji?

klienta:

customer_id    int(40)   primary key 
CustomerAccountNumber varchar(60) 
CustomerAccountName  varchar(255) 
AccountBalance   double  
InvAddressLine1   varchar(500) 
Rep      varchar(20) 

Aby zapisać „klientów internetowych” login i nazwy użytkowników, mam inną tabelę konta internetowego o nazwie „Web_customers”, które ma „CustomerAccountNumber” jako klucz podstawowy.

Web_customers:

web_id     int(11)   primary key 
UserName    varchar(39)  
CustomerAccountNumber varchar(39) 
EmailAddress   varchar(255) 
Pwd      varchar(70)  
customer_type   varchar(10) 

dane próbki:

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 

Odkąd uruchomić skrypt PHP często przeładować dane w sposób ciągły zmiany customer_id i dlatego nie mogę wybrać go jako klucz obcy w mojej drugiej tabeli, która jest tutaj:

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 

Posiadam dwa rodzaje klientów: "Prosty" i "złożony". Zwykli klienci mają jeden numer CustomerAccountNumber i mają tylko jedną nazwę użytkownika w odpowiedniej tabeli WEB_CUST.

Klientami złożonymi są klienci o tym samym numerze konta. Ale problemem jest "złożony" klient. Kiedy klient WEB o nazwie użytkownika Accnt313 i Accnt2 zmienia informacje, aktualizuje wszystkich innych klientów mających ten sam Accnt2 w mojej tabeli XML "Klient". UWAGA Wszystkie pola w moim pliku XML są wstawiane bezpośrednio do tabeli klienta za pomocą metody wsadowej wstawiania. Od tego czasu mój plik XML zawierał więcej niż 60 000, a analizowanie i wstawianie danych do tabel podrzędnych mogło spowodować problemy z wydajnością. Dlatego właśnie nie rozpadł się i dlatego szukam alternatywnego rozwiązania.

Jak mogę temu zapobiec? Jak mogę normalizować w tym przypadku? Czy istnieje sposób, w jaki mógłbym normalizować bez zakłócania głównej tabeli XML "Klient" z powodu wydajności analizowania XML i przeładowywania przyczyn?

+0

ten klient typu "złożonego" to więcej niż jedna osoba? tj. grupę osób? – SparKot

+0

Myślę, że możesz przenieść 'customer_type' z' web_cust' do tabeli 'customer'. A jeśli nie pozwalasz żadnym złożonym użytkownikom na zmianę danych, to jak mogą to zmienić, jeśli chcą? – SparKot

+0

@ DoSparKot. Dziękuję za odpowiedź. Tak. Wielokrotna nazwa użytkownika może być przypisana do tego samego numeru konta. Czy w tym przypadku trzeba złamać główną tabelę klientów?jeśli tak, to jak mogę normalizować używając obu tabel? – BiL

Odpowiedz

1

System działa tak, jak go zaprojektowałeś.

Jeśli chcesz, aby każdy klient internetowy ze wspólnym kodem konta był traktowany jako osobny klient z oddzielnymi informacjami rozliczeniowymi i saldem konta, skopiuj wszystkie pola z klienta do tabeli klienta internetowego i nigdy nie zmieniaj tabeli klientów.

polecam zrestrukturyzować swoją bazę następująco

AccountCode 
    ID 
    AccountCode 


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

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

i analizować swoje XML poprawnie.

Powiązane problemy