Mine

รูปภาพของฉัน
หาดใหญ่, ภาคใต้, Thailand
ชอบเอาใจ แต่ก็เอาแต่ใจ

วันพฤหัสบดีที่ 8 เมษายน พ.ศ. 2553

สร้างตารางตัวเล็ก ปลอดภัยไร้กังวล

สวัสดีค่ะ หลังจากที่ไข่ทิ้งไว้แล้วก็หายไปนานเลย พอดีงานเข้าซะด้วย...เฮอๆ
ที่จริงก็อยากจะเขียนเป็นบทเป็นตอนๆนะ แต่ก็ยัง งง อยู่ เรียบเรียงไม่ถูก
เอาเป็นว่า หยิบเรื่องที่ได้จากประสบการณ์มาเขียนละกันค่ะ

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

ที่จริงข้อจำกัดก็มีทางออกค่ะ เอาเป็นว่ามาลองดูกันดีกว่า ใครอยากลองก็เชิญทางนี้ค่ะ
1. กรณีสร้างจากคำสั่ง create
CREATE TABLE TEST (
    TEST_ID    varchar(25) NULL,
    TEST_DESC        varchar(25) NULL
    );
จะสังเกตุได้ว่า ถ้าเราใช้ Tool เข้าไปดู จะสร้างเป็นตัวเล็กให้เราค่ะ เราจะได้ตารางชื่อ test  และชื่อ field ก็ตัวเล็กด้วย ซึ่งตรงนี้การทำงานก็ปกติค่ะ

2. กรณีสร้างจาก Tool (ในที่นี้ใช้ Aqua Data Studio 4.7.2)  เมื่อเรา Preview SQL ที่ Gen ให้ จะได้คำสั่งดังนี้
CREATE TABLE "public"."TEST2" (
    "TEST2_ID"      varchar(25) NULL,
    "TEST2_DESC"    varchar(25) NULL
    );
เมื่อเราสร้างด้วยคำสั่งที่ Gen ให้ หรือ สร้างผ่าน Tool จะได้ตารางเป็นตัวใหญ่ตามที่กำหนดเพราะว่าอยู่ภายใต้เครื่องหมายคำพูด("")
แต่เมื่อเราต้องใช้งานตารางนี้ เราจะเลี่ยงการใช้ "" ไม่ได้ มาลองดู
คำสั่งแรก
select * from TEST2;
ผลลัพธ์ที่ได้เป็น
[Error] Script lines: 1-2 --------------------------
 ERROR: relation "test2" does not exist
 Line: 1
ถ้าจะให้การทำงานถูกต้อง ลองมาใช้คำสั่งนี้ดูค่ะ
select * from "TEST2";
 ผลลัพธ์ที่ได้เป็น ข้อมูลที่มีอยู่ ถ้าไม่มีข้อมูลก็ไม่ได้ขึ้น ERROR ค่ะ

บางคนอาจจะคิดว่าแล้วถ้าเราใช้คำสั่งเป็นตัวเล็กหมดได้หรือเปล่า
งั้นก็เอาคำสั่งนี้ไปลองค่ะ
select * from test2;
 ผลลัพธ์ที่ได้เป็น
[Error] Script lines: 1-2 --------------------------
 ERROR: relation "test2" does not exist
 Line: 1

ทดสอบสำหรับ PostgreSQL Version 8.0.9 นะคะ
ถ้าเป็น Version ใหม่กว่านี้ไม่แน่ใจว่าจะเหมือนหรือต่างกันหรือไม่ค่ะ
เพราะว่าคำสั่ง SQL ก็ไม่เหมือนแล้วค่ะ คือ Version ใหม่ของ PostgreSQL นั้นจะต้องเขียนคำสั่งที่ถูกต้องจริงๆ
ไม่ยืดหยุด (ไม่คิดให้แล้วว่าเราต้องการอะไร) เช่น การเรียกใช้ Function เมื่อก่อน เรามีเคาะ ก็ยังเรียกดูข้อมูลได้ 
ตัวอย่าง 
select cast('1' as integer);
select cast ('1' as integer); --ใช้กับ Version ใหม่ไม่ได้ เช่น 8.3

* หากมีอะไรเพิ่มเติม แนะนำด้วยนะคะ อันนี้ก็ได้มาที่เคยทำเท่านั้น ส่วนทฤษฎี ไม่ค่อยนิยม (ไม่ชอบอ่านหนังสือ)