Thaimisc.com : PHP กับฐานข้อมูล MySQL (18)
ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us | Colocation | Web Hosting | เปิดร้านค้าฟรี


Category : Php Developer Print Article Only Print Aticle With Comment
PHP กับฐานข้อมูล MySQL (18)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 18-06-2004

มัวแต่ไปวุ่นวายกับเรื่องการย้ายโฮสต์ของ เว็บไดอารี่หนักกบาล เลยไม่ได้มาอัพเดตเลยครับ แต่ตอนนี้เรียบร้อยแล้ว ก็จะพยายามมาอัพเดตให้บ่อยขึ้นครับ

ในตอนที่แล้วเราสังเกตได้ว่าคำสั่ง SQL

UPDATE `employee` SET `department` = 'Finance' WHERE `name` = 'Sompong Nongsomchai' AND `position` = 'Manager' AND `department` = 'Accounting' AND CONCAT( `salary` ) = '30000.00' LIMIT 1 ;

นั้นมีจุดด้อยอยู่ตรงที่เงื่อนไขหลัง WHERE นั้น มันยาวเฟื้อยเสียเหลือเกิน เนื่องจากต้องระบุทั้ง name, position, department และ salary ซึ่งจริงๆ จะว่าไปแล้ว ด้วยข้อมูลที่มีอยู่ในขณะนี้ หลายคนอาจจะคิดว่า เพียงแค่ระบุแค่ ชื่อ และนามสกุลเข้าไป มันก็เพียงพอแล้ว... อันนี้เห็นจะจริงครับ เพราะว่าหายากมากครับ ที่จะมีคนชื่อ และนามสกุลเดียวกันมาอยู่ในบริษัทเดียวกัน (คนชื่อ และนามสกุลเดียวกันนั้นมีโอกาสเป็นไปได้ แต่ว่าไอ้ที่จะมาเจอกันได้นี่ ยากครับ)

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

Primary Key??
ในด้านระบบการบริหาร และจัดการฐานข้อมูลแล้ว คำว่า key จะหมายถึงฟิลด์ที่เราใช้เป็นหลักในการจัดเรียงข้อมูล ซึ่งบางครั้งเราจะเรียกมันว่า ดัชนี (index)... เรามักสร้างฟิลด์ที่เก็บข้อมูลใดๆ ที่เอาไว้เชื่อมโยงกับตารางฐานข้อมูลอื่นๆ ให้เป็น key อีกด้วยครับ อันนี้เราจะเรียกว่า foreign key (เรื่องนี้จะกล่าวถึงในภายหลัง)

สำหรับ primary key นั้น คือฟิลด์ข้อมูลที่จะไม่มีทางไปซ้ำกับข้อมูลอื่นๆ ได้อีก ซึ่งโดยมากแล้วมักจะเป็นข้อมูลตัวเลขครับ โดยมีแอตทริบิวต์เป็น auto increment หรือเพิ่มค่าเองโดยอัตโนมัติ... และเรามักจะเรียกง่ายๆ ว่า id นั่นเอง

สมมติว่าเรากำหนดรหัสประจำตัวให้กับพนักงานแต่ละคน โดยเริ่มจาก 1, 2, 3... ไปเรื่อยๆ โดยเพิ่มฟิลด์ชื่อ eid (ย่อมาจาก employee id น่ะ) เข้าไปล่ะ?!?

ติ๊ต่างว่า ผมกำหนดให้ฟิลด์ eid ของระเบียนที่เก็บข้อมูลของ Sompong Nongsomchai นั้นมีค่าเป็น 1 ถ้าเกิดผมอยากอัพเดตข้อมูลใดๆ ของนาย Sompong คนนี้ เวลาผมใส่เงื่อนไข WHERE ผมก็แค่อ้างอิงถึง eid = 1 จริงไหมครับ (เพราะยังไงเสีย เราก็ไม่ไปแก้ไขอะไรกับฟิลด์นี้อยู่แล้ว)

ดังนั้นโค้ดที่ยาวเหยียดด้านบน ก็จะเหลือแค่

UPDATE `employee` SET `department` = 'Finance' WHERE `eid` = '1' LIMIT 1 ;

แทน... ใช่ไหมครับ (ส่วน LIMIT 1 นั้น จะปรากฏ หากใช้ phpMyAdmin จัดการครับ แต่เวลาเราเขียนโค้ดเอง เราไม่จำเป็นต้องทำก็ได้)

สั้นกว่าเดิมเยอะเลยเนอะ

(ติดตามตอนต่อไป)

<- Back | Next ->

ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us
Copyright 1999-2006 Thailand Miscellaneous. Allrights reserved. webmaster@thaimisc.com