2013-02-27 24 views
5

मेरे पास एक्सएमएल है जिसमें सभी ग्राहक जानकारी संग्रहीत की जाती है। जब भी मेरा PHP कोड चलता है, यह ग्राहक डेटा को एक्सएमएल से डाटाबेस में डालता है। टेबल यहाँ है। सभी ग्राहक वेब नहीं हैं, इसलिए मैंने सभी ग्राहक जानकारी सीधे "ग्राहक" नामक एक तालिका में सहेजी है।सामान्यीकरण का उपयोग कर रिडंडेंसी कैसे निकालें?

ग्राहक:

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 

जब से मैं डेटा लगातार CUSTOMER_ID अक्सर बदलती रहती है फिर से लोड करने PHP स्क्रिप्ट चलाने के लिए और यही वजह है कि मैं इसे के रूप में चयन नहीं कर सकते मेरी दूसरी तालिका में विदेशी कुंजी जो यहां है:

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 

मेरे पास दो प्रकार के ग्राहक हैं, "सरल" और "जटिल"। सरल ग्राहकों के पास एक ग्राहक खाता संख्या है और संबंधित WEB_CUST तालिका में केवल एक ही उपयोगकर्ता नाम है।

जटिल ग्राहक वे ग्राहक हैं जो एक ही खाता संख्या हैं। लेकिन समस्या "जटिल" ग्राहक है। जब उपयोगकर्ता नाम Accnt313 और Accnt2 के साथ WEB ग्राहक जानकारी बदलता है, तो यह मेरे एक्सएमएल टेबल "ग्राहक" में एक ही Accnt2 वाले सभी अन्य ग्राहकों को अपडेट करता है। नोट मेरे एक्सएमएल में सभी फ़ील्ड सीधे डालने विधि का उपयोग कर ग्राहक तालिका में डाले जाते हैं। चूंकि, मेरे एक्सएमएल में 60,000 से अधिक थे और बाल तालिकाओं में डेटा डालने और डालने से प्रदर्शन समस्या बढ़ सकती थी। इसलिए, मैं इसे तोड़ नहीं दिया और यही कारण है कि मैं वैकल्पिक समाधान की तलाश में हूं।

मैं इसे कैसे रोक सकता हूं? मैं इस मामले में सामान्य कैसे हो सकता हूं? क्या एक्सएमएल पार्सिंग दक्षता और पुनः लोड करने के कारणों के कारण मुख्य एक्सएमएल टेबल "ग्राहक" को परेशान किए बिना मैं सामान्य कर सकता हूं?

+0

यह 'जटिल 'प्रकार ग्राहक एक से अधिक व्यक्ति है? यानी व्यक्तियों का एक समूह? – SparKot

+0

मुझे लगता है कि आप 'web_cust' से' ग्राहक' तालिका 'में 'customer_type' स्थानांतरित कर सकते हैं। और यदि आप किसी जटिल ग्राहक उपयोगकर्ता को डेटा बदलने की अनुमति नहीं देते हैं तो वे इसे बदल सकते हैं यदि वे चाहते हैं? – SparKot

+0

@ DoSparKot। आपकी प्रतिक्रिया के लिए धन्यवाद। हाँ। एकाधिक उपयोगकर्ता नाम एक ही खाता संख्या में असाइन किया जा सकता है। मुझे इस मामले में मुख्य ग्राहक तालिका तोड़ने की जरूरत है?यदि हां, तो मैं दोनों टेबलों का उपयोग करके सामान्य कैसे कर सकता हूं? – BiL

उत्तर

1

सिस्टम काम कर रहा है क्योंकि आपने इसे डिज़ाइन किया है।

यदि आप सामान्य खाता कोड वाले प्रत्येक वेब ग्राहक को अलग-अलग बिलिंग जानकारी और खाता शेष के साथ एक अलग ग्राहक माना जाना चाहते हैं, तो ग्राहक से सभी फ़ील्ड को वेब-ग्राहक तालिका में कॉपी करें और ग्राहक तालिका को कभी भी न बदलें।

मैं तुम्हें अपने डेटाबेस पुनर्गठन के रूप में

AccountCode 
    ID 
    AccountCode 


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

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

अनुसरण करता है और सही ढंग से अपने XML पार्स सलाह देते हैं।

संबंधित मुद्दे