SlideShare une entreprise Scribd logo
1  sur  39
สไลด์ต้นแบบสามารถดาวน์โหลดได้ที่
http://codex.cs.yale.edu/avi/db-book/db6/slide-dir/
การขึ้นต่อกันของข้อมูล
• Data Dependency = การขึ้นต่อกันของข้อมูล
• เกิดจาก Attribute หนึ่งมีความสัมพันธ์กับอีก Attribute หนึ่ง
• แบ่งออกเป็น 3 ประเภท
   – Functional Dependency
   – Multivalued Dependency
   – Join Dependency
• ในคอร์สนี้จะศึกษาเพียง Functional Dependency เท่านั้น
ฟังก์ชันการขึ้นต่อกัน
• Functional Dependency (FD) = ฟังก์ชันการขึ้นต่อกัน
• FD จะเกิดขึ้นเมื่อมีค่าของ Attribute หนึ่งสอดคล้องกับอีก
Attribute หนึ่งเพียงหนึ่งค่า
   – นิยาม เมื่อ R เป็น Relation และให้ A, B เป็นส่วนหนึ่งของ Attribute ที่อยู่ใน
   R ถ้าหากค่า A นั้นสอดคล้องกับค่า B เพียงหนึ่งค่า จะกล่าวได้ว่า “B นั้นขึ้นต่อ A”
   หรือ “A เป็นตัวกาหนด B” หรือ A -> B
   – เราจะเรียก A ว่าตัวกาหนด (Determinant) และ B ว่าตัวถูกระบุค่า
   (Dependent)
• Functional Dependency มีผลต่อการเลือก PK และการทา NF
ลักษณะของฟังก์ชันการขึ้นต่อกัน
• Trivial Functional Dependency
   – ความสัมพันธ์ระหว่าง Determinant Set กับ Determinant Subset
   – ไม่รู้ความหมายอะไรในตาราง ก็สามารถบอก Dependent ได้
   – ไม่ค่อยสาคัญเท่าไร
• Nontrivial Functional Dependency
   – ความสัมพันธ์ระหว่าง Determinant Attribute Set กับ Attribute อื่น
   – ต้องเข้าใจความหมาย ความสัมพันธ์ เงื่อนไขของ Attribute ในตาราง ถึง
   จะบอก Dependent ได้
Trivial Functional Dependency
    id        char_name    hair_id skin_color    level    class_name
thep444     Adolescence   2        f0e7c8       34       Archer
thep444     AcetoOrceiN   17       f0e7c8       68       Knight
madoka555   QBayDesu      15       ffffff       57       Magician

• ในตารางนี้มี Trivial Functional Dependency เท่าไร
Nontrivial Functional Dependency
    id        char_name    hair_id skin_color    level    class_name
thep444     Adolescence   2        f0e7c8       34       Archer
thep444     AcetoOrceiN   17       f0e7c8       68       Knight
madoka555   QBayDesu      15       ffffff       57       Magician

• ในตารางนี้มี Nontrivial Functional Dependency
    – {id, char_name}  {hair_id, skin_color, level, class_name}

    – {char_name}  {hair_id, skin_color, level, class_name}
Nontrivial Functional Dependency




• ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
Nontrivial Functional Dependency
รหัสพนักงาน      ชื่อพนักงาน    รหัสแผนก วันที่ทางาน เวลาเข้างาน เวลาออกงาน
   226        Keiseiie Hara      FKnL     2100/6/28     7:45       18:10
   227        Kawada I. Inoue     LL      2100/6/30     8:01       19:24
   226        Keiseiie Hara      FKnL     2100/6/30     6:19       17:16
   228        Moriyama Aiko       HR      2100/7/1      8:59       16:44
   229        Keiseiie Kune       CP      2100/7/1      7:33       20:54
   229        Keiseiie Kune       CP      2100/7/3      7:42       19:17

 • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
รูปแบบของฟังก์ชันการขึ้นต่อกัน
• Full Functional Dependency
  – เกิดจากทุก Attribute ใน Determinant Set กาหนดค่า Attribute ทั้งหมด
  – ถ้า Determinant Set D สามารถกาหนดทุกค่าใน Attribute แล้ว D จะเป็น
  Primary Key
• Partial Dependency
  – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่เป็น PK
• Transitive Dependency
  – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่ไม่เป็น PK
Full Functional Dependency
รหัสพนักงาน      ชื่อพนักงาน     รหัสแผนก        ตาแหน่งงาน          เงินเดือน
   226        Keiseiie Hara       FKnL      L Hand General Knight     14800
   227        Kawada I. Inoue      LL         Linguistics Lecturer    13900
   228        Moriyama Aiko        HR           Salary Manager        10430
   229        Keiseiie Kune        CP       Computer Programmer       12040
   230        Tadachizu Yoichi    FKnL      L Hand Security Guard     9400
   231        Meira Meiji           P        Super General Priest     9000

• {รหัสพนักงาน} --> {ชื่อพนักงาน, รหัสแผนก, ตาแหน่งงาน, เงินเดือน}
Partial Functional Dependency
    id        char_name    hair_id skin_color   level    class_name
thep444     Adolescence       2      f0e7c8      34     Archer
thep444     AcetoOrceiN      17      f0e7c8      68     Knight
madoka555   QBayDesu         15       ffffff     57     Magician

•   {char_name}  {hair_id, skin_color, level, class_name}
Transitive Functional Dependency
      proj_name    staff_id         job_class     job_id   เงินเดือน
AbBeaw Project       120      Presenter           20540     6100
AbBeaw Project       145      Presenter           20540     6100
Makenai Camp         228      First Aid Manager   31001     8020
Makenai Camp         130      Director            90001     15400
Makenai Camp         144      Entertainer         90100      8020
Makenai Camp         210      Entertainer         90100      8020

 •   {job_id}  {job_class}
 •   {job_class}  {job_id}
การนาเสนอฟังก์ชันที่ขึ้นต่อกัน
• เราสามารถเขียน Functional Dependency ได้ 2 รูปแบบ
   – เขียนเป็น Diagram
   – เขียนเป็นเซต
• ขึ้นกับความถนัดของบุคคลนั้น ๆ



            {EMP_NUM}  {EMP_NAME, JOB_CLASS}
Normalization
• Normalization = การทาบรรทัดฐาน, การทาให้เป็นมาตรฐาน
• กระบวนการหนึ่งที่มีอยู่ในการออกแบบฐานข้อมูล
   – การแก้ไขตารางข้อมูลให้มีการซ้าซ้อนของข้อมูลน้อยลง
   – นิยมทาไปพร้อมกันกับการออกแบบ ER Diagram
• Normalization จะทาตามลาดับไปเรื่อย ๆ
   – แต่ละระดับเรียกว่า Normal form
   – Normal Form (NF) = รูปแบบบรรทัดฐาน
Normal Form
• ข้อกาหนดในการแก้ไขตารางภายในฐานข้อมูล
• รูปแบบที่มีตัวเลขมาก ข้อกาหนดยิ่งมากขึ้น แต่ฐานข้อมูลที่ได้ยิ่งดีขึ้น
   – รูปแบบบรรทัดฐานที่ 1 (1NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 0 (0NF)
   – รูปแบบบรรทัดฐานที่ 2 (2NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 1
   – ...
• ในปัจจุบันรูปแบบบรรทัดฐานหลักมีทั้งหมด 9 รูปแบบ[1]
   – 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF
• ส่วนใหญ่นิยมแก้ไขถึงรูปแบบบรรทัดฐานที่ 3 (3NF)
ข้อเสียของตารางที่ไม่ทา Normal Form
• ปัญหาการเพิ่มข้อมูล (Insertion Anomalies)
   – การเพิ่มข้อมูลที่มีข้อมูลไม่ครบตาม Schema
   – อาจใส่ค่า null แต่ null เป็นค่าที่เราไม่อยากได้
• ปัญหาการแก้ไขข้อมูล (Update Anomalies)
   – การแก้ไขข้อมูลที่มีความซ้าซ้อนกันในตาราง
   – ไล่แก้ไปเรื่อย ๆ
• ปัญหาการลบข้อมูล (Deletion Anomalies)
   – ข้อมูลใน Attribute นั้นไม่อยากลบ แต่ข้อมูลนั้นอยู่ที่ Tuple ที่อยากลบ
Insertion Anomalies
     id            char_name    hair_id skin_color    level    class_name
thep444         Adolescence     2       f0e7c8       34       Archer
0816581025      Sensation       10      eed99b       11       Novice
madoka555       null            null    null         null     null
darni_maria     FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs       นู๋IปJIทย       7       f0e7c8       13       Novice


                    id
              thunderstrom
Update Anomalies
     id          char_name    hair_id skin_color    level    class_name
thep444       Adolescence     2       f0e7c8       34       Archer
0816581025    Sensation       10      eed99b       11       Archer
madoka555     QBayDesu        15      ffffff       57       Magician
darni_maria   FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs     นู๋IปJIทย       7       f0e7c8       13       Archr
0876551000    n๐IIหล          1       343232       1        Novice
Deletion Anomalies
     id          char_name    hair_id skin_color    level    class_name
thep444       Adolescence     2       f0e7c8       34       Archer
0816581025    Sensation       10      eed99b       11       Archer
madoka555     QBayDesu        15      ffffff       57       Magician
darni_maria   FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs     นู๋IปJIทย       7       f0e7c8       13       Archr
0876551000    n๐IIหล          1       343232       1        Novice
รูปแบบบรรทัดฐานที่ 1
• รูปแบบบรรทัดฐานที่ 1 = First Normal Form (1NF)
• ตารางในข้อกาหนด 1NF ต้องมี Attribute ใด ๆ อยู่ภายใน Attribute
   – ถ้ามี Attribute ซ้อนอยู่ จะเอา Attribute ที่ซ้อนกันออก
• ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว
• ทุก ๆ Attribute ต้องขึ้นกับ Primary Key
• Schema ที่แปลงจาก ER Diagram จะเป็น 1NF ในทันที
การทาตารางเป็น 1NF
Serv    Server                   Board     Charac      Character              Character Info
                      ID
 ID     Name                     Name       ter ID      Name        LV Class Name        Job Name
 0     Mochi                                 1       Adolescence    34                 Archer
                  thep44       Nopakun~*                                 Fighter
                                             1       Adolescence    41                 Scout
       Takoyaki
                  thanyapol thanyapol        15      NeoS                Backpacker    Mechanic
 1                                                                  99
                                             78      parazettamon                      Bard
       Takoyaki kunemata       kunemata                                  Spell User
                                            150      Sufflez        76                 Sage
 0     Mochi                                104      Harasama       64                 Dark Stalker
                                                                         Fighter
                  olfactory    harasama     119      Reizinixc      99                 Bounty Hunter
 1     Takoyaki
                                            183      ReizinixcII    36 Backpacker      Tatarabe
การทาตารางเป็น 1NF
  • Attribute ใดที่ซ้อนกับ Attribute ให้เอา Attribute นั้นออก

Serv   Server          Board   Charac    Character          Character Info
                ID
 ID    Name            Name     ter ID    Name       LV Class Name     Job Name




Serv   Server          Board   Charac    Character
                ID                                   LV Class Name     Job Name
 ID    Name            Name     ter ID    Name
การทาตารางเป็น 1NF
     • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว
Serv   Server                   Board     Charac      Character
                     ID                                            LV Class Name     Job Name
 ID    Name                     Name       ter ID      Name
 0     Mochi     thep44       Nopakun~*     1       Adolescence    34 Fighter      Archer
 1     Takoyaki thep44        Nopakun~*     1       Adolescence    41 Fighter      Scout
 1     Takoyaki thanyapol thanyapol         15      NeoS           99 Backpacker   Mechanic
 1     Takoyaki kunemata      kunemata      78      parazettamon   99 Spell User   Bard
 1     Takoyaki kunemata      kunemata     150      Sufflez        76 Spell User   Sage
 0     Mochi     olfactory    harasama     104      Harasama       64 Fighter      Dark Stalker
 1     Takoyaki olfactory     harasama     119      Reizinixc      99 Fighter      Bounty Hunter
 1     Takoyaki olfactory     harasama     183      ReizinixcII    36 Backpacker   Tatarabe
การทาตารางเป็น 1NF
     • ทุก Attribute ต้องขึ้นกับ Primary Key
Serv    Server                  Board     Charac      Character
                     ID                                            LV Class Name     Job Name
 ID     Name                    Name       ter ID      Name
 0     Mochi     thep44       Nopakun~*     1       Adolescence    34 Fighter      Archer
 1     Takoyaki thep44        Nopakun~*     1       Adolescence    41 Fighter      Scout
 1     Takoyaki thanyapol thanyapol         15      NeoS           99 Backpacker   Mechanic
 1     Takoyaki kunemata      kunemata      78      parazettamon   99 Spell User   Bard
 1     Takoyaki kunemata      kunemata     150      Sufflez        76 Spell User   Sage
 0     Mochi     olfactory    harasama     104      Harasama       64 Fighter      Dark Stalker
 1     Takoyaki olfactory     harasama     119      Reizinixc      99 Fighter      Bounty Hunter
 1     Takoyaki olfactory     harasama     183      ReizinixcII    36 Backpacker   Tatarabe
รูปแบบบรรทัดฐานที่ 2
• รูปแบบบรรทัดฐานที่ 2 = Second Normal Form (2NF)
• มีหลายเหตุผลที่ต้องทาตารางให้เป็น 2NF
   – ปัญหาความซ้าซ้อนของข้อมูล
• ตาราง 2NF ต้องผ่านคุณสมบัติทั้งหมดของ 1NF มาก่อน
• 2NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับบางส่วนของ Primary Key
   – ไม่มี Partial Dependency
การทาตารางเป็น 2NF
  • พิจารณา Partial Dependency ของตาราง

Serv   Server          Board   Charac    Character
                ID                                   LV Class Name   Job Name
 ID    Name            Name     ter ID    Name



  {Serv ID, Character ID}  {Server Name, ID, Board Name, Character
  Name, LV, Class Name, Job Name}
  {Serv ID}  {Server Name}
การทาตารางเป็น 2NF
• แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้
ตารางใหม่มี PK คือ Determinant Set
• ตั้งชื่อ Schema ใหม่ที่แยกออกมา
                           Serv   Server
 ตารางรายชื่อเซิร์ฟเวอร์    ID    Name


 ตารางลักษณะตัวละคร
 Serv              Board     Character     Character
         ID                                            LV Class Name   Job Name
  ID               Name         ID          Name
รูปแบบบรรทัดฐานที่ 3
• รูปแบบบรรทัดฐานที่ 3 = Second Normal Form (3NF)
• ในบางครั้ง การทาตาราง 2NF ยังไม่พอ
   – ปัญหาความซ้าซ้อนของข้อมูลอีกแล้ว
• ตาราง 3NF ต้องผ่านคุณสมบัติทั้งหมดของ 2NF มาก่อน
• 3NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับ Attribute ใด ๆ ที่ไม่เป็น
Primary Key
   – ไม่มี Transitive Dependency
การทาตารางเป็น 3NF
• พิจารณา Transitive Dependency ของตาราง
• อย่าลืมพิจารณาตารางที่ถูกแยกจาก 2NF ด้วย
                           Serv   Server
 ตารางรายชื่อเซิร์ฟเวอร์    ID    Name


 ตารางลักษณะตัวละคร
 Serv              Board     Character     Character
         ID                                            LV Class Name   Job Name
  ID               Name         ID          Name


{ID}  {Board Name}
{Job Name}  {Class Name}
ECO Job                         System[2]



 1st Class        2nd Class    3rd Class   1st Class    2nd Class      3rd Class    1st Class      2nd Class        3rd Class
             Blademaster                               Sorcerer                                 Blacksmith
Swordman                      Gladiator    Wizard                   Force Master   Tatarabe                       Maestro
             Bounty Hunter                             Sage                                     Machinery
             Knight                                    Elementer                                Alchemist
Fencer                        Guardian     Shaman                   Astralist      Farmer                         Harvest
             Dark Stalker                              Enchanter                                Marionette
             Assasin                                   Druid                                    Explorer
Scout                         Eraser       Vates                    Cardinal       Ranger                         Strider
             Commando                                  Bard                                     Treasure Hunter
             Striker                                   Cabalist                                 Trader
Archer                        Hawker       Warlock                  Soultaker      Merchant                       Royal Dealer
             Gunner                                    Warlock                                  Gambler

             Fighter Class                          Spell User Class                        Backpacker Class
การทาตารางเป็น 3NF
• แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้
ตารางใหม่มี PK คือ Determinant Set
• ตั้งชื่อ Schema ใหม่ที่แยกออกมา
                                ตารางลักษณะตัวละคร
                 Serv           Character   Character
                          ID                            LV   Job Name
                  ID               ID        Name


ตารางรายชื่อเซิร์ฟเวอร์        ตารางชื่อในเว็บบอร์ด             ตารางคลาสอาชีพ
 Serv ID Server Name            ID      Board Name           Job Name   Class Name
รูปแบบบรรทัดฐานบอยซ์คอดด์
• ในเชิงธุรกิจ การทาตารางถึง 3NF นั้นเพียงพอแล้ว แต่บางครั้งก็ยังไม่พอ
• การพิจารณา BCNF ไม่ต้องพิจารณา 1NF, 2NF, 3NF ก็ได้
• ลักษณะของ Relation ที่สามารถนามาพิจารณา BCNF
   – มี Candidate Key ตั้งแต่ 2 ตัวขึ้นไป
   – Primary Key เป็น Composite Key
   – Candidate Key บางตัวมีการใช้ Attribute      เดียวกันเป็นส่วนหนึ่งของ
   Candidate Key
• BCNF จะไม่มี Attribute บางส่วนที่เป็น PK ขึ้นกับบาง Attribute ที่ไม่
เป็น PK
การทาตารางเป็น BCNF
• ผู้ พั ฒ นาระบบคนหนึ่ ง อยากให้ พิ จ ารณาว่ า ตารางการสอนของ
มหาวิทยาลัย S นั้นอยู่ใน BCNF หรือไม่
       Teacher Name   Semester   Year   Course ID   sec   Capacity
     Mera Meiji          1       2001   02358230    1       300
     Mera Meiji          2       2001   02358230    2       300
     Keiseiie Kune       1       2001   02358101    1       300
     Edogawa Asaki       1       2002   01411103    1       40
     Inoue Shuichi       1       2002   01411103    2       40
     Keiseiie Hara       2       2002   01999610    1       30
     Inoue Fumiko        2       2002   01420101    1       300
การทาตารางเป็น BCNF
• ภายในตารางไม่พบ Transitive Dependency, Partial Dependency
ดังนั้นตารางนี้เป็นตาราง 3NF
• ตารางนี้ไม่เป็น BCNF เพราะ {Semester, Course ID, sec} เป็น
ตัวกาหนดให้กับ {Teacher Name}


      Teacher Name   Semester   Year   Course ID   sec   Capacity
การทาตารางเป็น BCNF
• การเปลี่ยนให้เป็น BCNF ทาได้โดยเปลี่ยน Determinant Set ที่ไม่ใช่
PK มาเป็น PK แทน ส่วน Dependent Set นั้นเปลี่ยนเป็น Attribute
ธรรมดา
       Teacher Name   Semester   Year   Course ID   sec   Capacity




       Teacher Name   Semester   Year   Course ID   sec   Capacity
การทาตารางเป็น BCNF
• ในกรณีที่ Determinant Set เป็น Attribute ที่ไม่ได้อยู่ใน PK ทั้งหมด
การเปลี่ยนเป็น BCNF อาจทาให้เกิด Partial Dependency ได้
          A         B         C         D          E



          C         B         D         A          E




                    B         C         A

              B          C          D          E
รูปแบบบรรทัดฐานที่ 4
•   รูปแบบบรรทัดฐานที่ 4 = Fourth Normal Form (4NF)
•   ส่วนใหญ่ไม่นิยมทากัน
•   ตาราง 4NF ต้องผ่านคุณสมบัติทั้งหมดของ BCNF มาก่อน
•   คอร์สนี้ไม่มีเรื่อง 4NF
Denormalization
• ข้อมูลที่ผ่าน Normalization แล้ว จะทาให้ข้อมูลซ้าซ้อนลดลง และ
Schema มากขึ้น
• การคืนสภาพของตาราง Schema ที่ Normalized แล้ว จะใช้วิธี
Natural Join
   – ยิ่ง Schema มาก การ Natural Join จะยิ่งช้าลงเรื่อย ๆ
• Denormalization ช่วยเพิ่มความเร็วในการ Query ยิ่งขึ้น
• การตัดสินใจ Denormalization ขึ้นกับจุดประสงค์ที่ใช้งานตาราง
Denormalization




• ข้อขัดแย้งระหว่าง Time กับ Space
• เป้าหมายคือประสิทธิภาพระบบโดยรวมที่ดีที่สุด

Contenu connexe

En vedette

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Database Normalization

  • 2. การขึ้นต่อกันของข้อมูล • Data Dependency = การขึ้นต่อกันของข้อมูล • เกิดจาก Attribute หนึ่งมีความสัมพันธ์กับอีก Attribute หนึ่ง • แบ่งออกเป็น 3 ประเภท – Functional Dependency – Multivalued Dependency – Join Dependency • ในคอร์สนี้จะศึกษาเพียง Functional Dependency เท่านั้น
  • 3. ฟังก์ชันการขึ้นต่อกัน • Functional Dependency (FD) = ฟังก์ชันการขึ้นต่อกัน • FD จะเกิดขึ้นเมื่อมีค่าของ Attribute หนึ่งสอดคล้องกับอีก Attribute หนึ่งเพียงหนึ่งค่า – นิยาม เมื่อ R เป็น Relation และให้ A, B เป็นส่วนหนึ่งของ Attribute ที่อยู่ใน R ถ้าหากค่า A นั้นสอดคล้องกับค่า B เพียงหนึ่งค่า จะกล่าวได้ว่า “B นั้นขึ้นต่อ A” หรือ “A เป็นตัวกาหนด B” หรือ A -> B – เราจะเรียก A ว่าตัวกาหนด (Determinant) และ B ว่าตัวถูกระบุค่า (Dependent) • Functional Dependency มีผลต่อการเลือก PK และการทา NF
  • 4. ลักษณะของฟังก์ชันการขึ้นต่อกัน • Trivial Functional Dependency – ความสัมพันธ์ระหว่าง Determinant Set กับ Determinant Subset – ไม่รู้ความหมายอะไรในตาราง ก็สามารถบอก Dependent ได้ – ไม่ค่อยสาคัญเท่าไร • Nontrivial Functional Dependency – ความสัมพันธ์ระหว่าง Determinant Attribute Set กับ Attribute อื่น – ต้องเข้าใจความหมาย ความสัมพันธ์ เงื่อนไขของ Attribute ในตาราง ถึง จะบอก Dependent ได้
  • 5. Trivial Functional Dependency id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer thep444 AcetoOrceiN 17 f0e7c8 68 Knight madoka555 QBayDesu 15 ffffff 57 Magician • ในตารางนี้มี Trivial Functional Dependency เท่าไร
  • 6. Nontrivial Functional Dependency id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer thep444 AcetoOrceiN 17 f0e7c8 68 Knight madoka555 QBayDesu 15 ffffff 57 Magician • ในตารางนี้มี Nontrivial Functional Dependency – {id, char_name}  {hair_id, skin_color, level, class_name} – {char_name}  {hair_id, skin_color, level, class_name}
  • 7. Nontrivial Functional Dependency • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
  • 8. Nontrivial Functional Dependency รหัสพนักงาน ชื่อพนักงาน รหัสแผนก วันที่ทางาน เวลาเข้างาน เวลาออกงาน 226 Keiseiie Hara FKnL 2100/6/28 7:45 18:10 227 Kawada I. Inoue LL 2100/6/30 8:01 19:24 226 Keiseiie Hara FKnL 2100/6/30 6:19 17:16 228 Moriyama Aiko HR 2100/7/1 8:59 16:44 229 Keiseiie Kune CP 2100/7/1 7:33 20:54 229 Keiseiie Kune CP 2100/7/3 7:42 19:17 • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
  • 9. รูปแบบของฟังก์ชันการขึ้นต่อกัน • Full Functional Dependency – เกิดจากทุก Attribute ใน Determinant Set กาหนดค่า Attribute ทั้งหมด – ถ้า Determinant Set D สามารถกาหนดทุกค่าใน Attribute แล้ว D จะเป็น Primary Key • Partial Dependency – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่เป็น PK • Transitive Dependency – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่ไม่เป็น PK
  • 10. Full Functional Dependency รหัสพนักงาน ชื่อพนักงาน รหัสแผนก ตาแหน่งงาน เงินเดือน 226 Keiseiie Hara FKnL L Hand General Knight 14800 227 Kawada I. Inoue LL Linguistics Lecturer 13900 228 Moriyama Aiko HR Salary Manager 10430 229 Keiseiie Kune CP Computer Programmer 12040 230 Tadachizu Yoichi FKnL L Hand Security Guard 9400 231 Meira Meiji P Super General Priest 9000 • {รหัสพนักงาน} --> {ชื่อพนักงาน, รหัสแผนก, ตาแหน่งงาน, เงินเดือน}
  • 11. Partial Functional Dependency id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer thep444 AcetoOrceiN 17 f0e7c8 68 Knight madoka555 QBayDesu 15 ffffff 57 Magician • {char_name}  {hair_id, skin_color, level, class_name}
  • 12. Transitive Functional Dependency proj_name staff_id job_class job_id เงินเดือน AbBeaw Project 120 Presenter 20540 6100 AbBeaw Project 145 Presenter 20540 6100 Makenai Camp 228 First Aid Manager 31001 8020 Makenai Camp 130 Director 90001 15400 Makenai Camp 144 Entertainer 90100 8020 Makenai Camp 210 Entertainer 90100 8020 • {job_id}  {job_class} • {job_class}  {job_id}
  • 13. การนาเสนอฟังก์ชันที่ขึ้นต่อกัน • เราสามารถเขียน Functional Dependency ได้ 2 รูปแบบ – เขียนเป็น Diagram – เขียนเป็นเซต • ขึ้นกับความถนัดของบุคคลนั้น ๆ {EMP_NUM}  {EMP_NAME, JOB_CLASS}
  • 14. Normalization • Normalization = การทาบรรทัดฐาน, การทาให้เป็นมาตรฐาน • กระบวนการหนึ่งที่มีอยู่ในการออกแบบฐานข้อมูล – การแก้ไขตารางข้อมูลให้มีการซ้าซ้อนของข้อมูลน้อยลง – นิยมทาไปพร้อมกันกับการออกแบบ ER Diagram • Normalization จะทาตามลาดับไปเรื่อย ๆ – แต่ละระดับเรียกว่า Normal form – Normal Form (NF) = รูปแบบบรรทัดฐาน
  • 15. Normal Form • ข้อกาหนดในการแก้ไขตารางภายในฐานข้อมูล • รูปแบบที่มีตัวเลขมาก ข้อกาหนดยิ่งมากขึ้น แต่ฐานข้อมูลที่ได้ยิ่งดีขึ้น – รูปแบบบรรทัดฐานที่ 1 (1NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 0 (0NF) – รูปแบบบรรทัดฐานที่ 2 (2NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 1 – ... • ในปัจจุบันรูปแบบบรรทัดฐานหลักมีทั้งหมด 9 รูปแบบ[1] – 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF • ส่วนใหญ่นิยมแก้ไขถึงรูปแบบบรรทัดฐานที่ 3 (3NF)
  • 16. ข้อเสียของตารางที่ไม่ทา Normal Form • ปัญหาการเพิ่มข้อมูล (Insertion Anomalies) – การเพิ่มข้อมูลที่มีข้อมูลไม่ครบตาม Schema – อาจใส่ค่า null แต่ null เป็นค่าที่เราไม่อยากได้ • ปัญหาการแก้ไขข้อมูล (Update Anomalies) – การแก้ไขข้อมูลที่มีความซ้าซ้อนกันในตาราง – ไล่แก้ไปเรื่อย ๆ • ปัญหาการลบข้อมูล (Deletion Anomalies) – ข้อมูลใน Attribute นั้นไม่อยากลบ แต่ข้อมูลนั้นอยู่ที่ Tuple ที่อยากลบ
  • 17. Insertion Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Novice madoka555 null null null null null darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Novice id thunderstrom
  • 18. Update Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Archer madoka555 QBayDesu 15 ffffff 57 Magician darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Archr 0876551000 n๐IIหล 1 343232 1 Novice
  • 19. Deletion Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Archer madoka555 QBayDesu 15 ffffff 57 Magician darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Archr 0876551000 n๐IIหล 1 343232 1 Novice
  • 20. รูปแบบบรรทัดฐานที่ 1 • รูปแบบบรรทัดฐานที่ 1 = First Normal Form (1NF) • ตารางในข้อกาหนด 1NF ต้องมี Attribute ใด ๆ อยู่ภายใน Attribute – ถ้ามี Attribute ซ้อนอยู่ จะเอา Attribute ที่ซ้อนกันออก • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว • ทุก ๆ Attribute ต้องขึ้นกับ Primary Key • Schema ที่แปลงจาก ER Diagram จะเป็น 1NF ในทันที
  • 21. การทาตารางเป็น 1NF Serv Server Board Charac Character Character Info ID ID Name Name ter ID Name LV Class Name Job Name 0 Mochi 1 Adolescence 34 Archer thep44 Nopakun~* Fighter 1 Adolescence 41 Scout Takoyaki thanyapol thanyapol 15 NeoS Backpacker Mechanic 1 99 78 parazettamon Bard Takoyaki kunemata kunemata Spell User 150 Sufflez 76 Sage 0 Mochi 104 Harasama 64 Dark Stalker Fighter olfactory harasama 119 Reizinixc 99 Bounty Hunter 1 Takoyaki 183 ReizinixcII 36 Backpacker Tatarabe
  • 22. การทาตารางเป็น 1NF • Attribute ใดที่ซ้อนกับ Attribute ให้เอา Attribute นั้นออก Serv Server Board Charac Character Character Info ID ID Name Name ter ID Name LV Class Name Job Name Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name
  • 23. การทาตารางเป็น 1NF • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name 0 Mochi thep44 Nopakun~* 1 Adolescence 34 Fighter Archer 1 Takoyaki thep44 Nopakun~* 1 Adolescence 41 Fighter Scout 1 Takoyaki thanyapol thanyapol 15 NeoS 99 Backpacker Mechanic 1 Takoyaki kunemata kunemata 78 parazettamon 99 Spell User Bard 1 Takoyaki kunemata kunemata 150 Sufflez 76 Spell User Sage 0 Mochi olfactory harasama 104 Harasama 64 Fighter Dark Stalker 1 Takoyaki olfactory harasama 119 Reizinixc 99 Fighter Bounty Hunter 1 Takoyaki olfactory harasama 183 ReizinixcII 36 Backpacker Tatarabe
  • 24. การทาตารางเป็น 1NF • ทุก Attribute ต้องขึ้นกับ Primary Key Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name 0 Mochi thep44 Nopakun~* 1 Adolescence 34 Fighter Archer 1 Takoyaki thep44 Nopakun~* 1 Adolescence 41 Fighter Scout 1 Takoyaki thanyapol thanyapol 15 NeoS 99 Backpacker Mechanic 1 Takoyaki kunemata kunemata 78 parazettamon 99 Spell User Bard 1 Takoyaki kunemata kunemata 150 Sufflez 76 Spell User Sage 0 Mochi olfactory harasama 104 Harasama 64 Fighter Dark Stalker 1 Takoyaki olfactory harasama 119 Reizinixc 99 Fighter Bounty Hunter 1 Takoyaki olfactory harasama 183 ReizinixcII 36 Backpacker Tatarabe
  • 25. รูปแบบบรรทัดฐานที่ 2 • รูปแบบบรรทัดฐานที่ 2 = Second Normal Form (2NF) • มีหลายเหตุผลที่ต้องทาตารางให้เป็น 2NF – ปัญหาความซ้าซ้อนของข้อมูล • ตาราง 2NF ต้องผ่านคุณสมบัติทั้งหมดของ 1NF มาก่อน • 2NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับบางส่วนของ Primary Key – ไม่มี Partial Dependency
  • 26. การทาตารางเป็น 2NF • พิจารณา Partial Dependency ของตาราง Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name {Serv ID, Character ID}  {Server Name, ID, Board Name, Character Name, LV, Class Name, Job Name} {Serv ID}  {Server Name}
  • 27. การทาตารางเป็น 2NF • แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้ ตารางใหม่มี PK คือ Determinant Set • ตั้งชื่อ Schema ใหม่ที่แยกออกมา Serv Server ตารางรายชื่อเซิร์ฟเวอร์ ID Name ตารางลักษณะตัวละคร Serv Board Character Character ID LV Class Name Job Name ID Name ID Name
  • 28. รูปแบบบรรทัดฐานที่ 3 • รูปแบบบรรทัดฐานที่ 3 = Second Normal Form (3NF) • ในบางครั้ง การทาตาราง 2NF ยังไม่พอ – ปัญหาความซ้าซ้อนของข้อมูลอีกแล้ว • ตาราง 3NF ต้องผ่านคุณสมบัติทั้งหมดของ 2NF มาก่อน • 3NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับ Attribute ใด ๆ ที่ไม่เป็น Primary Key – ไม่มี Transitive Dependency
  • 29. การทาตารางเป็น 3NF • พิจารณา Transitive Dependency ของตาราง • อย่าลืมพิจารณาตารางที่ถูกแยกจาก 2NF ด้วย Serv Server ตารางรายชื่อเซิร์ฟเวอร์ ID Name ตารางลักษณะตัวละคร Serv Board Character Character ID LV Class Name Job Name ID Name ID Name {ID}  {Board Name} {Job Name}  {Class Name}
  • 30. ECO Job System[2] 1st Class 2nd Class 3rd Class 1st Class 2nd Class 3rd Class 1st Class 2nd Class 3rd Class Blademaster Sorcerer Blacksmith Swordman Gladiator Wizard Force Master Tatarabe Maestro Bounty Hunter Sage Machinery Knight Elementer Alchemist Fencer Guardian Shaman Astralist Farmer Harvest Dark Stalker Enchanter Marionette Assasin Druid Explorer Scout Eraser Vates Cardinal Ranger Strider Commando Bard Treasure Hunter Striker Cabalist Trader Archer Hawker Warlock Soultaker Merchant Royal Dealer Gunner Warlock Gambler Fighter Class Spell User Class Backpacker Class
  • 31. การทาตารางเป็น 3NF • แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้ ตารางใหม่มี PK คือ Determinant Set • ตั้งชื่อ Schema ใหม่ที่แยกออกมา ตารางลักษณะตัวละคร Serv Character Character ID LV Job Name ID ID Name ตารางรายชื่อเซิร์ฟเวอร์ ตารางชื่อในเว็บบอร์ด ตารางคลาสอาชีพ Serv ID Server Name ID Board Name Job Name Class Name
  • 32. รูปแบบบรรทัดฐานบอยซ์คอดด์ • ในเชิงธุรกิจ การทาตารางถึง 3NF นั้นเพียงพอแล้ว แต่บางครั้งก็ยังไม่พอ • การพิจารณา BCNF ไม่ต้องพิจารณา 1NF, 2NF, 3NF ก็ได้ • ลักษณะของ Relation ที่สามารถนามาพิจารณา BCNF – มี Candidate Key ตั้งแต่ 2 ตัวขึ้นไป – Primary Key เป็น Composite Key – Candidate Key บางตัวมีการใช้ Attribute เดียวกันเป็นส่วนหนึ่งของ Candidate Key • BCNF จะไม่มี Attribute บางส่วนที่เป็น PK ขึ้นกับบาง Attribute ที่ไม่ เป็น PK
  • 33. การทาตารางเป็น BCNF • ผู้ พั ฒ นาระบบคนหนึ่ ง อยากให้ พิ จ ารณาว่ า ตารางการสอนของ มหาวิทยาลัย S นั้นอยู่ใน BCNF หรือไม่ Teacher Name Semester Year Course ID sec Capacity Mera Meiji 1 2001 02358230 1 300 Mera Meiji 2 2001 02358230 2 300 Keiseiie Kune 1 2001 02358101 1 300 Edogawa Asaki 1 2002 01411103 1 40 Inoue Shuichi 1 2002 01411103 2 40 Keiseiie Hara 2 2002 01999610 1 30 Inoue Fumiko 2 2002 01420101 1 300
  • 34. การทาตารางเป็น BCNF • ภายในตารางไม่พบ Transitive Dependency, Partial Dependency ดังนั้นตารางนี้เป็นตาราง 3NF • ตารางนี้ไม่เป็น BCNF เพราะ {Semester, Course ID, sec} เป็น ตัวกาหนดให้กับ {Teacher Name} Teacher Name Semester Year Course ID sec Capacity
  • 35. การทาตารางเป็น BCNF • การเปลี่ยนให้เป็น BCNF ทาได้โดยเปลี่ยน Determinant Set ที่ไม่ใช่ PK มาเป็น PK แทน ส่วน Dependent Set นั้นเปลี่ยนเป็น Attribute ธรรมดา Teacher Name Semester Year Course ID sec Capacity Teacher Name Semester Year Course ID sec Capacity
  • 36. การทาตารางเป็น BCNF • ในกรณีที่ Determinant Set เป็น Attribute ที่ไม่ได้อยู่ใน PK ทั้งหมด การเปลี่ยนเป็น BCNF อาจทาให้เกิด Partial Dependency ได้ A B C D E C B D A E B C A B C D E
  • 37. รูปแบบบรรทัดฐานที่ 4 • รูปแบบบรรทัดฐานที่ 4 = Fourth Normal Form (4NF) • ส่วนใหญ่ไม่นิยมทากัน • ตาราง 4NF ต้องผ่านคุณสมบัติทั้งหมดของ BCNF มาก่อน • คอร์สนี้ไม่มีเรื่อง 4NF
  • 38. Denormalization • ข้อมูลที่ผ่าน Normalization แล้ว จะทาให้ข้อมูลซ้าซ้อนลดลง และ Schema มากขึ้น • การคืนสภาพของตาราง Schema ที่ Normalized แล้ว จะใช้วิธี Natural Join – ยิ่ง Schema มาก การ Natural Join จะยิ่งช้าลงเรื่อย ๆ • Denormalization ช่วยเพิ่มความเร็วในการ Query ยิ่งขึ้น • การตัดสินใจ Denormalization ขึ้นกับจุดประสงค์ที่ใช้งานตาราง
  • 39. Denormalization • ข้อขัดแย้งระหว่าง Time กับ Space • เป้าหมายคือประสิทธิภาพระบบโดยรวมที่ดีที่สุด