Normal forms

การออกแบบฐานข้อมูล

Lis Sulmont

Curriculum Manager

Normalization

ระบุกลุ่มข้อมูลที่ซ้ำกันและสร้างตารางใหม่สำหรับกลุ่มเหล่านั้น

นิยามที่เป็นทางการมากขึ้น:

เป้าหมายของการทำ Normalization คือ:

  • ระบุระดับความซ้ำซ้อนในโครงสร้างเชิงสัมพันธ์ได้
  • มีกลไกในการแปลงโครงสร้างเพื่อกำจัดความซ้ำซ้อน
1 Database Design, 2nd Edition โดย Adrienne Watt
การออกแบบฐานข้อมูล

Normal forms (NF)

เรียงจาก Normalize น้อยที่สุดไปมากที่สุด:

  • First normal form (1NF)
  • Second normal form (2NF)
  • Third normal form (3NF)
  • Elementary key normal form (EKNF)
  • Boyce-Codd normal form (BCNF)

$$

  • Fourth normal form (4NF)
  • Essential tuple normal form (ETNF)
  • Fifth normal form (5NF)
  • Domain-key Normal Form (DKNF)
  • Sixth normal form (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 และ
    • ถ้า Primary key มีคอลัมน์เดียว
      • จะผ่าน 2NF โดยอัตโนมัติ
    • ถ้ามี Composite primary key
      • คอลัมน์ที่ไม่ใช่ key ทุกคอลัมน์ต้องขึ้นอยู่กับ key ทั้งหมด

ข้อมูลเริ่มต้น

| 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
  • ไม่มี Transitive dependencies: คอลัมน์ที่ไม่ใช่ key จะขึ้นอยู่กับคอลัมน์ที่ไม่ใช่ key อื่นไม่ได้

ข้อมูลเริ่มต้น

| 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 |
การออกแบบฐานข้อมูล

ความผิดปกติของข้อมูล

จะเกิดความเสี่ยงอะไรหาก Normalize ไม่เพียงพอ?

1. Update anomaly

2. Insertion anomaly

3. Deletion anomaly

การออกแบบฐานข้อมูล

Update anomaly

ความไม่สอดคล้องของข้อมูลที่เกิดจากความซ้ำซ้อนเมื่อทำการอัปเดต

| 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:

  • ต้องอัปเดตมากกว่าหนึ่งเร็คคอร์ด มิฉะนั้นข้อมูลจะไม่สอดคล้องกัน
  • ผู้อัปเดตต้องทราบถึงความซ้ำซ้อนของข้อมูล
การออกแบบฐานข้อมูล

Insertion anomaly

ไม่สามารถเพิ่มเร็คคอร์ดได้เนื่องจากข้อมูลบางอย่างขาดหายไป

| 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       |

ไม่สามารถเพิ่มนักเรียนที่สมัครแล้วแต่ยังไม่ได้ลงทะเบียนคอร์สใดได้

การออกแบบฐานข้อมูล

Deletion anomaly

การลบเร็คคอร์ดทำให้ข้อมูลอื่นสูญหายโดยไม่ตั้งใจ

| 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       |

หากลบนักเรียน 230 ออก ข้อมูลของคอร์ส Cleaning Data in R จะเกิดอะไรขึ้น?

การออกแบบฐานข้อมูล

ความผิดปกติของข้อมูล

จะเกิดความเสี่ยงอะไรหาก Normalize ไม่เพียงพอ?

1. Update anomaly

2. Insertion anomaly

3. Deletion anomaly

ยิ่งฐานข้อมูล Normalize มากเท่าไร ก็ยิ่งเกิดความผิดปกติของข้อมูลน้อยลงเท่านั้น

อย่าลืมข้อเสียของการทำ Normalization จากวิดีโอที่แล้ว

การออกแบบฐานข้อมูล

มาฝึกกันเถอะ!

การออกแบบฐานข้อมูล

Preparing Video For Download...