नॉर्मल फॉर्म्स

डेटाबेस डिज़ाइन

Lis Sulmont

Curriculum Manager

नॉर्मलाइज़ेशन

दोहराए जा रहे डेटा समूह पहचानें और उनके लिए नई टेबल बनाएँ

एक अधिक औपचारिक परिभाषा:

नॉर्मलाइज़ेशन के लक्ष्य:

  • रिलेशनल स्कीमा में अनावश्यक दोहराव के स्तर को वर्णित करना
  • दोहराव हटाने के लिए स्कीमा बदलने के तरीके देना
1 Database Design, 2nd Edition by Adrienne Watt
डेटाबेस डिज़ाइन

नॉर्मल फॉर्म्स (NF)

कम से अधिक नॉर्मलाइज़्ड क्रम में:

  • फर्स्ट नॉर्मल फॉर्म (1NF)
  • सेकंड नॉर्मल फॉर्म (2NF)
  • थर्ड नॉर्मल फॉर्म (3NF)
  • एलिमेंटरी की नॉर्मल फॉर्म (EKNF)
  • बॉयस-कोड नॉर्मल फॉर्म (BCNF)

$$

  • फोर्थ नॉर्मल फॉर्म (4NF)
  • एसेंशियल ट्यूपल नॉर्मल फॉर्म (ETNF)
  • फिफ्थ नॉर्मल फॉर्म (5NF)
  • डोमेन-की नॉर्मल फॉर्म (DKNF)
  • सिक्स्थ नॉर्मल फॉर्म (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
डेटाबेस डिज़ाइन

1NF नियम

  • हर रिकॉर्ड यूनिक होना चाहिए - डुप्लिकेट रो न हों
  • हर सेल में एक ही मान हो

प्रारंभिक डेटा

| Student_id | Student_Email   | Courses_Completed                                        | 
|------------|-----------------|----------------------------------------------------------|
| 235        | [email protected]   | Introduction to Python, Intermediate Python              |
| 455        | [email protected] | Cleaning Data in R                                       | 
| 767        | [email protected] | Machine Learning Toolbox, Deep Learning in Python        |
डेटाबेस डिज़ाइन

1NF में

| Student_id | Student_Email   | 
|------------|-----------------|
| 235        | [email protected]   | 
| 455        | [email protected] | 
| 767        | [email protected] | 
| Student_id | Completed                |
|------------|--------------------------|
| 235        | Introduction to Python   | 
| 235        | Intermediate Python      | 
| 455        | Cleaning Data in R       | 
| 767        | Machine Learning Toolbox | 
| 767        | Deep Learning in Python  | 
डेटाबेस डिज़ाइन

2NF

  • 1NF को संतुष्ट करना चाहिए और
    • अगर प्राइमरी की एक कॉलम है
      • तो स्वतः 2NF पूरा होता है
    • अगर कॉम्पोज़िट प्राइमरी की है
      • तो हर नॉन-की कॉलम सभी keys पर निर्भर होना चाहिए

प्रारंभिक डेटा

| Student_id (PK) | Course_id (PK) | Instructor_id | Instructor    | Progress |
|-----------------|----------------|---------------|---------------|----------|
| 235             | 2001           | 560           | Nick Carchedi | .55      |
| 455             | 2345           | 658           | Ginger Grant  | .10      |
| 767             | 6584           | 999           | Chester Ismay | 1.00     |
डेटाबेस डिज़ाइन

2NF में

| Student_id (PK) | Course_id (PK) | Percent_Completed |
|-----------------|----------------|-------------------|
| 235             | 2001           | .55               |
| 455             | 2345           | .10               |
| 767             | 6584           | 1.00              |
| Course_id (PK) | Instructor_id | Instructor    |
|----------------|---------------|---------------|
| 2001           | 560           | Nick Carchedi |
| 2345           | 658           | Ginger Grant  |
| 6584           | 999           | Chester Ismay |
डेटाबेस डिज़ाइन

3NF

  • 2NF को संतुष्ट करता है
  • कोई ट्रांज़िटिव डिपेंडेंसी नहीं: नॉन-की कॉलम एक-दूसरे नॉन-की कॉलम पर निर्भर नहीं हो सकते

प्रारंभिक डेटा

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
डेटाबेस डिज़ाइन

3NF में

| Course_id (PK) | Instructor    | Tech   |
|----------------|---------------|--------|
| 2001           | Nick Carchedi | Python |
| 2345           | Ginger Grant  | SQL    |
| 6584           | Chester Ismay | R      |
| Instructor_id | Instructor    | 
|---------------|---------------|
| 560           | Nick Carchedi | 
| 658           | Ginger Grant  | 
| 999           | Chester Ismay |
डेटाबेस डिज़ाइन

डेटा एनोमलीज़

अगर हम पर्याप्त नॉर्मलाइज़ नहीं करें तो जोखिम क्या हैं?

1. अपडेट एनोमली

2. इंसर्शन एनोमली

3. डिलीशन एनोमली

डेटाबेस डिज़ाइन

अपडेट एनोमली

अपडेट करते समय डेटा दोहराव से डेटा असंगति होना

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

स्टूडेंट 520 का ईमेल अपडेट करने के लिए:

  • एक से अधिक रिकॉर्ड अपडेट करने पड़ेंगे, नहीं तो असंगति होगी
  • अपडेट करने वाले यूज़र को दोहराव का पता होना चाहिए
डेटाबेस डिज़ाइन

इंसर्शन एनोमली

अनुपस्थित एट्रिब्यूट्स के कारण रिकॉर्ड जोड़ना संभव नहीं

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

ऐसे स्टूडेंट को insert नहीं कर सकते जिसने साइन अप किया है पर किसी कोर्स में एनरोल नहीं किया

डेटाबेस डिज़ाइन

डिलीशन एनोमली

रिकॉर्ड हटाने से अनजाने में डेटा खोना

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

अगर हम Student 230 हटाएँ, तो Cleaning Data in R के डेटा का क्या होगा?

डेटाबेस डिज़ाइन

डेटा एनोमलीज़

अगर हम पर्याप्त नॉर्मलाइज़ नहीं करें तो जोखिम क्या हैं?

1. अपडेट एनोमली

2. इंसर्शन एनोमली

3. डिलीशन एनोमली

जितना ज्यादा डेटाबेस नॉर्मलाइज़ होगा, उतना कम डेटा एनोमलीज़ होगी।

पिछले वीडियो में नॉर्मलाइज़ेशन के नुकसान न भूलें

डेटाबेस डिज़ाइन

अभ्यास करते हैं!

डेटाबेस डिज़ाइन

Preparing Video For Download...