Database

การนอร์มัลไลซ์ (Normalization) คือ?

posted on 22 Aug 2012 10:48 by inwprogramming in Database
พูดถึงการสร้างฐานข้อมูล (database) นั่น เมื่อเกิดการออกแบบ สร้างฐานข้อมูลได้ไม่ดี และเมื่อ ฐานข้อมูลยิ่งมีขนาดใหญ่ ขึ้น จะทำให้เกิด ความยุ่งยากและปัญหา ความซ้ำซ้อนของข้อมูล

http://www.uppicweb.com/x/i/ir/l9new.jpg

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

1. รูปแบบบรรทัดฐานขั้นที่ 1 First Normal Form: 1NF

การแปลงตารางข้อมูลให้อยู่ใรูป 1NF นั้น ข้อมูลจะ Key จะต้องไม่มีค่า “Null”  และข้อมูลในรูป 1NF จะต้องไม่มีความผิดพลาดที่เกิด ขึ้น เป็น  ความผิดพลาดในการปรับปรุงข้อมูล (update Anomalies)  ความผิดพลาดในการเพิ่มข้อมูล (Addition Anomalies) ความผิดพลาดในการลบข้อมูล โดยเงื่อนไขหลักของ 1NF  คือ
a) ต้องมีการกำหนด Attribute ที่ทำหน้าที่เป็น Key ทั้งหมด
b) ต้องไม่มี Repeating Group ในตาราง คือในตำแหน่งที่ Row ตัดกับ Column ค่าที่ได้จะต้องเแนค่าๆ เดียว ไม่ใช่กลุ่มของค่าข้อมูล
c) ทุกๆ  Attribute ต้องถูกระบุได้ด้วย Primary Key
โดย รูปบบตารางที่เป็น 1NF ยังมีปัญหาอยู่ คือมีบางส่วนของ Key สามารถ ชี้ถึง Attribute  ในตารางได้ (Partial  Dependencies)
โดยความเป้นจริงตารางที่ดี ไม่ควรมี Partial  Dependencies เพราะ จะทำใหเกิด ความซ้ำซ้อนของข้อมูลที่จะเกิด ทุก Row ที่ มีการซ้ำกันของข้อมูล

2. รูปแบบบรรทัดฐานขั้นที่ 2 Second Normal Form: 2NF

การแปลงตารางข้อมูลให้อยู่ในรูป 2NF นั้น อย่างแรกตาราง ต้องอยู่ใน รูปแบบ 1NF ก่อน จึงดำเนิน การต่อไปได้  โดยเงื่อนไขหลัก ของ 2NF คือ
a) ต้องเป็น 1NF
b)  ไม่มี Partial Dependencies คือไม่มี Attributeใด  ถูกระบุได้โดยใช้ส่วนหนึ่งของ Primary Key
(ตารางนั้น ถ้ามีลักษณะ ที่เป็น Transitive Dependencies โดนเกิด Transitive Dependenciesกับ Nonkey Attribute ยังถือว่าเป็น 2NF อยู่)

3. รูปแบบบรรทัดฐานขั้นที่ 3 Third Normal Form: 3NF

การแปลงตารางข้อมูลให้อยู่ในรูป 3 NF นั้น อย่างแรกตาราง ต้องอยู่ใน รูปแบบ 2NF ก่อน โดยจะแบ่งตารางที่เป็น Transitive Dependencies ออกเป็นตารางใหม่  แต่ต้องมี Attribute โยงไปตารางใหม่
โดยเงื่อนไขหลัก ของ 3NF คือ
a) ต้องเป็น 2NF
b)  ไม่มี Transitive Dependencies

4 รูปแบบบรรทัดฐานของบอยส์และคอดด์ : The BOYCE-CODD normal Form: BCNF

ตารางที่มีคุณสมบัติ เป็น BOYCE-CODD Normal Form ก็ต่อเมื่อทุกๆ Determinant ในตารางเป็น Candidate Key  (Determinant คือ Attribute ใดๆ ที่มีค่าสามารถระบุไปถึงข้อมูลต่างๆ ในแถวข้อมูล คือถ้าตารางมีคุณสมบัติ 3NF แล้ว  และมี Candidate Key เพียงแค่ตัวเดียว ตาราง น้นก็ถือว่าเป็น BCNF ไปด้วย ) โดย วิธี BCNF ผู้ออกแบบส่วนใหญ่จะมองว่าเป็นวิธีพิเศษ แบบออกจาก 3NF เพราะตารางที่มีคุณสมบัติ 2NF ก็อาจมีคุณสมบัติ ตรงตามแบบวิธี BCNF โดยไม่ได้เป็น 3NF ก็ได้  เพราะ คุณสมบัติหลัก หรือเงื่อนไขหลักของ BCNF คือมี Determinant ทุกตัวเป็น Candidate Key

5. รูปแบบบรรทัดฐานขั้นที่ 4  : fourth normal form: 4NF

ตามในด้านธุรกิจในปัจจุบัน นิยมปรับตารางให้อยู่ในรูปแบบ 3NF หรือ BCNF ก็เพียงพอต่อการใช้งานแล้ว
แต่ในบางกรณี อาจจะต้องมีการปรับ ขึ้นในระดับที่สูงขึ้น  โดยคุณสมบัติ ของ 4 NF ต้องมีเงื่อนนไขเป็น 3NF หรือ BNCF และไม่มี Multiple set ของ Multivalued Dependencies

6. รูปแบบบรรทัดฐานขั้นที่ 5 : fifth normal form: 5NF

ตารางที่มีคุณสมบัติ เป็น 5NF นั้นจะเกิด ขึ้นได้ยาก โดย จะมี Attribute ในตารางเป็น  primary Key ที่เกิด จาก Attribute 3  Attribute  ขึ้นไป หรือ คุณสมบัติ Join Dependency ซึ่งเป็นคุณสมบัติของการนำรีเลชั่นย่อยที่เกิดจากการแตกรีเลชั่นเดิมมารวม กัน แล้วได้ข้อมูลเช่นเดียวกับรีเลชั่นเดิม
และ จะต้องมีรูปแบบ เป็น 4NF  อยู่ก่อนแล้ว

การ ทำ นอร์มัลไลซ์ ในระดับที่สุดขึ้นแม้จะ แก้ปัญหา Anomalies ได้แต่ อาจ ไม่ถือว่าดีที่สุดเพราะ ยิ่ง จัดในระดับสูง จะ มีการแบ่งแยกตารางย่อยๆมาก ขึ้น  ทำให้การค้นหาข้อมูลในตารางช้า มาก เพราะต้องทำการ join ตารางเข้่าด้วยกัน ดังนั้น การปรับ ตาราง ด้วยวิธี นอร์มัลไลซ์ นั้น ควรเลือก ปรับในระดับที่พอดี และเหมาะกับการใช้งาน ในแต่ละงานด้วย

Login failed for user ‘username’ SQL Server.

posted on 18 Aug 2012 16:07 by inwprogramming in Database
Login failed for user The user is not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452)
 
อันเนื่องมาจากเครื่องที่ใช้สำหรับจองรายวิชาลงทะเบียน ที่เมื่อวันก่อนได้ช้าลงอย่างมาก CPU Load 100% ติดต่อกัน จนทำให้ระบบงานทำงานไม่ได้
เมื่อวันก่อนได้ลง SQL Server 2005 ลงที่เครื่องหนึ่งไว้สำรอง โดยจัดการลงใน “Windows Authentication Mode (Windows Authentication)” การติดตั้งเป็นไปด้วยความเรียบร้อย การติดต่อผ่าน Management Studio เป็นไปด้วยความเรียบร้อย
แต่เมื่อลองแก้ไขโปรแกรม เพื่อเปลี่ยน Connection ไปหา Database ที่ย้ายไปใหม่ปรากฏว่ามันไม่สามารถ Connect ได้มันแจ้ง error
Login failed for user ‘username’. The user is not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452)
อีกแล้วมีเรื่องให้แก้อีกแล้ว ลอง ๆ ไล่ดู เอ๊ะ!!! เราลืมอะไรไปเปล่า ทำแล้วชอบลืม ไม่จดบันทึกไว้ ไม่รู้จักจำ $%#*< ^@!!!
ปัญหามา ปัญญามี . . .
ปัญหาเกิดจากทำการติดตั้ง SQL Server ใน Windows Authentication Mode แล้วเมื่อ Application ที่เราได้เขียนไว้ใช้การติดต่อผ่าน account ของ SQL Server ไม่มี user บน Windows มันก็ติดต่อไม่ได้เป็นธรรมดา เราจะต้องเปลี่ยนจาก "Windows Authentication Mode (Windows Authentication)" ให้เป็น "Mixed Mode (Windows Authentication and SQL Server Authentication)" ถ้าไม่อยากแก้ไขโปรแกรมที่ออกแบบไว้จากเดิม
วิธีการ
- เข้า Microsoft SQL Server Management Studio แล้ว Connect Database Engine ที่ต้องการ
Pic. 1
- คลิกขวาที่ Database Engine ที่เลือกมาแล้วไปที่ Properties
Pic. 2
- ที่หน้าต่าง Server Properties ให้ไปที่ Security แล้วไปเลือกที่ SQL Server and Windows Authentication Mode จากนั้นคลิกปุ่ม OK
Pic. 3
- คลิกขวาที่ Database Engine ที่เลือกมาอีกครั้ง แล้วไปที่ Restart เป็นอันเสร็จสิ้น
Pic. 4
ใช้ได้แล้ว
แล้วพบกันใหม่ในปัญหาหน้า ^^

edit @ 18 Aug 2012 23:13:45 by P.Tongkamonwat

Review Database ที่เคยใช้มา

posted on 14 Aug 2012 20:54 by inwprogramming in Database
- MySQL 
ใช้ง่าย ฐานข้อมูลขนาดเล็ก ความปลอดภัยต่ำ ความต้องการทรัพยากรต่ำ
ของฟรี โอเพ่นซอร์ส คนใช้เป็นเยอะ
- MS SQL 
ใช้ง่ายปานกลาน ฐานข้อมูลขนาดปานกลาง ความปลอดภัยปานกลาง ความต้องการทรัพยากรปานกลาง
ของไมโครซอฟต์เสียตังค์ซื้อ ราคาแพง
- Oracle 
ใช้ยาก ฐานข้อมูลขนาดใหญ่ ความปลอดภัยสูง ความต้องการทรัพยากรสูง
ออราเคิล แพงมหาโหด แพงที่สุดในสามตัวนี้ คนใช้เป็นน้อย เงินเดือนสูง
- Mongo DB
เหมาะแก่การทำเว็บ เพราะว่าไม่มีการเก็บ Type และเป็น Open source
ตัวอย่างการเก็บข้อมูล 
{array:value}
ไม่ได้เป็น RDBMS
MongoDB
ฐานข้อมูลอื่น ๆ PostgreSQL