1  
   
line decor
  
line decor
 
 
 
 
 

การออกแบบฐานข้อมูลในรูปแบบบรรทัดฐานเบื้องต้น
การออกแบบฐานข้อมูลในบทนี้คุณจะได้เรียนรู้วิธีการทำตารางข้อมูลให้อยู่ในรูปแบบบรรทัดฐาน (Normalization) ซึ่งเป็นวิธีการที่สำคัญมากถือเป็นหัวใจของระบบฐานข้อมูลเชิงสัมพันธ์ เพราะหากคุณสามารถทำได้ถูกต้อง จะส่งผลให้ระบบฐานข้อมูลของคุณถูกต้องตามหลักการและได้รับประโยชน์สูงสุดเท่าที่จะมีขึ้นได้

    1. ความหมายของรูปแบบบรรทัดฐาน
      1. การทำตารางข้อมูลให้อยู่ ในรูปแบบบรรทัดฐาน (Normalization) หมายถึง การออกแบบตาราง (Relation) ให้เป็น รูปแบบบรรทัดฐาน คือมีความเป็นปรกติไม่ก่อให้เกิดปัญหาข้อมูลขัดแย้ง (Inconsistency) ในที่เก็บต่าง ๆ ปัญหาการเพิ่ม - ปรับปรุง และลบข้อมูล (Insert,Updateand Delete Anomalies) ตลอดจนช่วยลดเน้อที่ในการจัดเก็บข้อมูลให้อยู่ในระดับที่ยอมรับได้อีกด้วยแนวคิดการทำตารางให้อยู่ในรูปแบบบรรทัดฐานนี้ อี .เอฟ.คอดด์ เป็ฯผู้คิดขึ้นมาเป็นคนแรกเมื่อประมาณปี ค.ศ. 1917 กล่าวคือ ได้คิดค้นรูปแบบบรรทัดฐานขั้นที่ 1,2และ3แต่ต่อมาพบว่ารูปแบบบรรทัดฐานขั้นที่ 3 มีข้อจำกัดบางอย่างจึงร่วมกันคิดค้นรูปแบบบรรทัดฐานขั้นที่ 3 ใหม่ขึ้นมาในราว ปี ค.ศ. 1974 กับบอยซ์ จึงนิยมเรียกว่า รูปแบบบรรทัดฐาน บอยซ์/คอดด์ (Boyce/codd Normal Form) สำหรับรูปแบบบรรทัดฐานขั้นที่ 4และ5นั้นคิดค้นโดย โรแนลด์ ฟาจิน (Ronald Fagin) ในปี ค.ศ.1977 และ 1979

รูปแบบบรรทัดฐานมีต่าง ๆ ระดับดังนี้
1. รูปแบบบรรทัดฐานขั้นที่ 1 (First Normal Form: 1NF)
2. รูปแบบบรรทัดฐานขึ้นที่ 2 (Second Normal Form: 2NF)
3 รูปแบบบรรทัดฐานขึ้นที่ 3(Third Normal Form: 2NF)
4. รูปแบบบรรทัดฐานขึ้นที่ 3 ใหม่ (Boyce/Codd Normal Form: 2NF)
5. รูปแบบบรรทัดฐานขึ้นที่ 4 Forth Normal Form: 2NF)
6. รูปแบบบรรทัดฐานขึ้นที่ 5 (FifthNormal Form: 2NF)
โครงสร้างของตาราง (Relvars) ซึ่งประกอบด้วยชื่อแอตทริบิวต์ต่าง ๆ ที่อยู่ในรูปแบบบรรทัดฐาน
ในขั้นต่าง ๆ มีลักษณะบอกระดับได้
นอกจากนี้ยังมีรูปแบบบรรทัดฐานอื่น ๆ ที่มีผู้คิดค้นขึ้นมาอีก ได้แก่ รูปแบบบรรทัดฐานโดเมน – คีย์ และรูปแบบบรรทัดฐานรีสตริกชั่น- ยูเนียน ซึ่งยังไม่มีงานศึกษาวิจัดสนับสนุนมากพอ ในปัจจุบันจึงถือว่า รูปแบบบรรทัดฐานขั้นที่ 5 นี้นับเป็นขึ้นสูงสุดแล้ว แต่ไม่จำเป็นเสมอไปที่ตารางหนึ่งในฐานข้อมูลของเราจะต้องสามารุทำให้อยู่ในรูปแบบบรรทัดฐานขั้นสูงสุดขึ้นอยู่กัลป์ปบลักษณะของข้อมูลในตาราง แบะปัญหาที่เตาต้องการแก้ไขในระบบฐานข้อมูลของเราว่ามีปัญหาการปรับปรุงข้อมูลในฐานข้อมูลนั้นหรือไม่ และการแก้ปัญหาจะทำได้ด้วยการทำให้ตารางข้อมูลอยู่ในรูปแบบบรรทัดฐานขั้นถัดไปหรือไม่
แต่อย่างไรก็ตาม ในการออกแบบฐานข้อมูล เราควรมุ่งทำให้แอตทริบิวต์ในตาราง อยู่ในรูปแบบบรรทัดฐานขั้นที่สูงที่สุดเท่าที่จะเป็นไปได้ โดยทำตามหลักเกณฑ์ของรูปแบบบรรทัดฐานขั้นต่าง ๆ ดังนี้

    1. รูปแบบบรรทัดฐานขั้นที่ 1

รูปแบบบรรทัดฐานขั้นที่ 1 (First Normal Form: 1NF)
มีเงื่อนไขว่า “ตารางใดจะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 1 ได้ ก็ต่อเมื่อค่าของข้อมูลในแต่ละแถวมีค่าเพียงค่าเดียว สำหรับแต่ละแอตทริบิวต์”(คือเป็นค่าแบบ Atomic)
เช่น
NotFrist



SNO

STATUS

CITY

PNO

QTY

S 1

20

LONDON

P1
P2
P3
P4
P5
P6

300
200
400
200
100
100

S 2

10

Paris

P1
P2

300
400

S 3

10

Paris

P2

200

S 4

20

London

P2
P4
P5

200
300
400

ในตารางข้างบนนี้จะพบว่ามีการเก็บข้อมูลไว้หลายค่าในแถวเดียว โดยเฉพาะในแอตทริบิวต์ PNO
และ QTY จึงทำให้ตาราง NotFirst นี้ไม่อยู่ในรูปแบบบรรทัดฐานขั้นที่ 1 หากจะทำให้อยู่ในรูปแบบบรรทัดฐานขั้นที่ 1 จะต้องเป็นดังตาราง ต่อไปนี้


SNO

STATUS

CITY

PNO

QTY

S1

20

London

P1

300

S1

20

London

P2

200

S1

20

London

P3

400

S1

20

London

P4

200

S1

20

London

P5

100

S1

20

London

P6

100

S2

10

Paris

P1

300

S2

10

Paris

P2

400

S3

10

Paris

P2

200

S4

20

London

P2

200

S4

20

London

P4

300

S4

20

London

P5

400

รูปแบบบรรทัดฐานขั้นที่ 2
รูปแบบบรรทัดฐานจะอยู่ในรูปแบบบรรทัดฐานที่2 ได้ก็ต่อเมื่อ

  1. ตารางนั้นมีลักษณะอยู่ในรูปแบบบรรทัดฐานขั้นที่1 แล้ว และ
  2. แอตทริบิวต์ที่ไม่ใช่คีย์หลัก (Nonkey) ทุกตัวต่างขึ้นอยู่กับคีย์หลักโดยไม่สามาระลดรูปได้อีก

จากตารางจะพบว่ามีการขึ้นต่อกันในลักษณะที่แอตทริบิวต์ที่ไม่ใช่คีย์หลัก ไปขึ้นอยู่กับแอตทริบิวต์อื่นที่ไม่ใช่คีย์หลักได้แก่ FD2,FD3และ FD4 ทำให้ตาราง ไม่อยู่ในรูปแบบบรรทัดฐานที่ 2
ค่าของข้อมูลจะมีการซับซ้อนกันอยู่มากจึงนำไปสู่การเปลี่ยนแปลงปรับปรุงการเพิ่มและลบข้อมูลดังนี้

  1. ปัญหาการเพิ่มข้อมูล จะไม่สามารถเพิ่มข้อมูลได้จนกว่า ผู้จัดส่ง โดยเพิ่มเฉพาะเลขรหัส (SNO) และเมืองที่อยู่ของผู้จัดส่ง แต่ว่างเว้นส่วนอื่น ๆ ไว้ก่อน ได้แก่ (STATUS,PNO และ QTY) ก็จะไม่สามารุทำได้ เนื่องจากจะละค่าข้อมูลในคีย์หลักแม้เพียงส่วนใดส่วนหนึ่งไม่ได้
  2. ปัญหาการลบข้อมูล จะไม่สามารถลบข้อมูลของผู้จัดส่งรายการใดรายการหึ่งได้ เพราะจะทำให้ข้อมูลอื่นที่อาจยังไม่ต้องการลบหายไปด้วย เช่น ชี่อเมืองกับชื่อ สถานะของเมือง
  3. ปัญหาการปรับปรุงข้อมูล จะไม่สะดวกในการปรับปรุงข้อมูลให้เป็นปัจจุบัน เพราะจะต้องตามแก้หลายที่ เช่น ถ้า S1ย้ายจาก London จะต้องหาทุกทูเพิลที่เกี่ยวข้องกับ S1 และ London แล้วแก้ตามให้เป็นปัจจุบัน หรือไม่เช่นนั้นจะพบกับปัญหาผลลัพธ์ไม่คงเส้นคงวา(Inconsistent Result) กล่าวคือ ในทูเพิลหนึ่งแจ้งว่า S1 ตั้งอยู่ ที่ London ส่วนอีกทูเพิลหนึ่งบอกว่า S1 ตั้งอยู่ที่ Amsterdam

หากเป็นเช่นนี้เราสามารถแก้ไขได้ด้วยวิธีการทำตารางให้อยู่ในรูปแบบบรรทัดฐานในขั้นที่สูงไปตามลำดับ โดยใช้เทคนิคที่เรียกว่า การแยกส่วนประกอบ (Decomposition) โดยการอยกที่ถูกต้องนั้นจะต้องทำแล้วไม่เกิดการสูญเสียการขึ้นต่อกันบางประการไป (Nonloss Decompoosition) คือต้องสามารถทำย้อนกลับได้ผลคงเดิม (Reversible)ด้วยวิธีการเชื่อมตาราง (Join)ตาราง Second จะเก็บข้อมูลเฉพาะแอนทิตี้ของผู้จัดส่งและตาราง SP จะเก็บข้อมูลเฉพาะส่วนที่เกี่ยวกับการจัดส่งสินค้าดังแผนภาพนี้
Second


SNO

STATUS

CITY

S1

20

London

S2

10

Paris

S3

10

Paris

S4

20

London

SP



SNO

PNO

QTY

S1

P1

300

S1

P2

200

S1

P3

400

S1

P4

200

S1

P5

100

S1

P6

100

S2

P1

300

S2

P2

400

S3

P2

200

S4

P2

200

S4

P4

300

S4

P5

400

รูปแบบบรรทัดฐานขั้นที่ 3
มีเงื่อนไขว่า “ตารางใดจะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 3ได้ก็ต่อเมื่อ

  1. ตารางนั้นมีลักษณะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 2
  2. แอตทริบิวต์ที่ไม่ใช่คีย์หลัก (Nonkey) ทุกตัว จะต้องขึ้นอยู่กับคีย์หลักแบบไม่มีการถ่ายทอด

ตารางในลักษณะที่กล่าวถึงนี้มองเฉพาะที่มีคีย์หลักเป็นคีย์เดี่ยว ไม่ใช่คีย์ประกอบ
สังเกตว่าในตาราง Secondมีการขึ้นต่อกันดังนี้
FD1:SNO ->CITY
FD2:CITY->S TATUS
FD3:SNO->STATUS
ซึ่งจะสังเกตุได้ว่า FD3 ได้มาจากกฎการถ่ายทอดที่ระบุว่า “ถ้า A->B และ B->A แล้ว A->C ซึ่งอาจกล่าวอีกอย่างหนึ่งได้ว่า A->C ผ่านทาง A
ดังนั้น เราสามารถจะแยกส่วนประกอบของตาราง Second ให้เป็นตารางได้อีก 2 ตารางโดยเรามีทางเลือกทำได้ 2 แบบดังนี้
แบบที่ 1 แยกตาราง Second ออกเป็น
SC{SNO,CITY}และ
CS{CITY,STATUS}
แบบที่ 2 แยกตาราง Second ออกเป็น
SC{SNO,CITY}
SS{SNO,STATUS}
ปัญหาก็คือ เราต้องตอบคำถามให้ได้ว่าการแยกส่วนประกอบแบบใดจึงจะถูกต้องกล่าวคือ หลังจากแยกออกไปแล้ว ต้อง....

  1. ไม่เกิดการสูญเสียการขึ้นต่อกับบางประการไป
  2. สามารถทำย้อนกลับได้ผลคงเดิมด้วยวิธีการเชื่อมตาราง

มีทฤษฎีของริสสะเนน (Risssnrn,1977)ระบุว่าการทำ Projectionเพื่อให้ให้ได้ตาราง R1 และ R2 ออกมาจกตาราง R นั้นจะทำได้อย่างเป็นอิสระคือ

  1. การขึ้นต่อกันทุกรายการที่เดิมมีอยู่ในตาราง R เป็นผลลัพธ์ทางตรรกของการขึ้นต่อกันที่มาจากตาราง R1 และ R2
  2. แอตทริบิวต์ร่วมของตาราง R 1 และ R2 อย่างน้อยต้องเป็นคีย์คู่แข่งของตาราง R1 และ R 2

เมื่อพิจารณาดูแล้วจะเห็นว่า การแบ่งแบบที่ 2 คือ SC,SS ไม่ผ่านคุณสมบัติตามกฎของริสสะเนนในข้อ 1 นอกจากนั้นการอบ่งแบบที่ 2 จะไม่สามารถอนุมานได้ว่ามีการขึ้นต่อกันแบบ
FD2:CITY->STATUS
ดังนั้นการแยกส่วนประกอบออกเป็นตารางในแบบที่ 1 จึงถูกต้องตามหลักการดังกล่าวผลจากการดำเนินการข้างต้นนี้ทำให้ได้ตารางที่อยู่ในรูปแบบบรรทัดฐานขั้นที่ 3 คือ
SC



SNO

CITY

S1

London

S2

Paris

S3

Paris

S4

London

CS



CITY

STATUS

London

20

Paris

10

รูปแบบบรรทัดขั้นที่ 3 ใหม่
รูปแบบบรรทัดขั้นที่ 3 ใหม่เกิดขึ้นเนื่องจากรูปแบบบรรทัดฐานขั้นที่ 3 เดิมนั้นไม่สามารถจัดการกับปัญหาของโครงสร้างตารางที่มีคุณสมบัติต่อไปนี้ได้
1.มีคีย์คู่แข่ง 2 คีย์ขึ้นไป
2.คีย์คู่แข่งนั้นเป็นคีย์ประกอบ
3.คีย์คู่แข่งซึ่งเป็นคีย์ประกอบนั้นต้องมีตัวร่วมคือ มีแอตทริบิวต์ร่วมอย่างน้อย 1 ตัว
บอยส์และคอร์ดจึงร่วมกันคิดรูปแบบบรรทัดฐานขั้นที่ 3 ใหม่ขึ้นมาซึ่งมีกฎดังนี้
“ตารางใดจะอยู่ในรูปแบบบรรทัดฐานขึ้นที่ 3 ใหม่ได้ ก็ต่อเมื่อการขึ้นต่อกันที่สำคัญและลดรูปไม่ได้ทางด้านซ้าย มีคีย์คู่แข่งเป็นตัวกำหนดซึ่งอยู่ทางด้านซ้ายมือของนิพจน์การขึ้นต่อกัน
ตัวอย่างตาราง S{SNO,SNAME,CITY,STATUS}
S



SNO

SNAME

STATUS

CITY

S1

Smith

20

London

S2

Jones

10

Paris

S3

Blake

30

Paris

S4

Clark

20

London

S5

Adams

30

Athens

ซึ่งมีการขึ้นต่อกันดังนี้ (โดยสมมติว่า SNAME ไม่มีค่าของข้อมูลซ้ำ และ CITY กับ STATUS ไม่ยึดติดกัน
FD1:SNO->SNAME
FD2:SNAME->SNO
FD3:SNO->STATUS
FD4:SNO->CITY
FD5:SNAME->STATUS
FD6:SNAME->CITY
จะเห็นได้ว่าตัวกำหนด Determinals ซึ่งอยู่ด้านซ้ายมือของลูกศรได้แก่ SNO และ SNANE นั้นต่างก็เป็นคีย์คู่แข่งทั้นคู่
ตัวอย่าง SSP



SNO

SNAME

PNO

QTY

S1

Smith

P1

300

S1

Smith

P2

200

S1

Smith

P3

400

S1

Smith

P4

200

……

………

………

……..

ซึ่งมีการขึ้นต่อกันแบบฟังก์ชันดังนี้
FD1:SNO->SNAME
FD2:SNAME->SNO
FD3:{SNO,PNO}->QTY
FD4:{SNAME,PNO}->QTY
สังเกตได้ว่าค่าของข้อมูลใน SNAMEมีค่าซ้ำนอกจากนั้นยังมีคีย์คู่แข่ง ได้แก่ {SNO,PNO}แต่ตารางนี้ไม่อยู่ในรูปแบบบรรทัดฐานขั้นที่ 3 ใหม่เพราะมีตัวกำหนดทางด้านซ้ายขจองลูกศร คือ (SNAME,SNO)ซึ่งไม่ใช่คีย์คู่แข่ง ล่าวคือ FD1 มีตัวกำหนดคือ SNOซึ่งไม่ใช่คีย์ค๔แข่ง และ FD2 มีตัวกำหนดคือ SNAME ซึ่งไม่ใช่คีย์คู่แข่งกีย
วิธีแก้คือ การแยกส่วนประกอบของตาราง SSP ออกเป็น 2 ตารางคือ
SS{SNO,SNAME}
SP{SNO,PNO,QTY}

 


 

1