0Pricing
SQL Academy · บทเรียน

การเลือกคีย์และชนิดข้อมูล

เลือกคีย์หลัก BIGSERIAL หรือ UUID ตัดสินใจระหว่าง TEXT กับ VARCHAR(n) และเลือกชนิดข้อมูลที่เหมาะสมสำหรับทุกคอลัมน์

การเลือกคีย์และชนิดข้อมูล เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเลือกคีย์หลัก

ตัวเลือกที่ใช้งานได้จริงมีสามแบบ:

  1. BIGSERIAL — จำนวนเต็ม 64 บิตที่เพิ่มขึ้นอย่างต่อเนื่อง
  2. UUID — ค่าที่ไม่ซ้ำกันทั่วโลกขนาด 128 บิต
  3. คีย์ธรรมชาติ — ตัวระบุจากโลกจริง (อีเมล, ISBN)

กรณีที่ BIGSERIAL เหมาะกว่า

ตัวเลือกเริ่มต้นสำหรับแอปส่วนใหญ่:

  • มีขนาดเล็ก (8 ไบต์) ดัชนีทำงานเร็ว และใช้แคชได้ดี
  • เพิ่มขึ้นต่อเนื่อง → ข้อมูลล่าสุดจะกระจุกอยู่ที่ท้ายดัชนี
  • อ่านได้ง่ายใน URL (เช่น /posts/42)

กรณีที่ UUID เหมาะกว่า

เลือก UUID เมื่อ:

  • ต้องใช้ ID ที่ไม่ซ้ำกันทั่วโลก (เช่น แอปที่ทำงานหลายศูนย์ข้อมูลหรือทำงานแบบออฟไลน์เป็นหลัก)
  • ไม่ต้องการให้ URL เปิดเผยปริมาณธุรกิจผ่าน ID
  • ต้องการสร้าง ID ฝั่งไคลเอ็นต์ก่อน INSERT

ต้นทุนคือ 16 ไบต์ (เทียบกับ 8 ไบต์สำหรับ BIGINT) และ UUID รุ่น v4 จะทำให้การ INSERT ลงในดัชนีมีลำดับแบบสุ่ม

เหตุใดคีย์ธรรมชาติจึงมีความเสี่ยง

อีเมลเปลี่ยนแปลงได้ SKU อาจถูกเปลี่ยนชื่อ รหัสประเทศอาจถูกแบ่งออก ใช้คีย์ตัวแทนเป็น PK และใช้ข้อจำกัด UNIQUE กับคีย์ธรรมชาติ

ชนิดคอลัมน์: สตริง

สำหรับคอลัมน์ข้อความส่วนใหญ่:

  • VARCHAR(n) — เมื่อมีขอบเขตบนที่ตายตัว (อีเมล รหัส)
  • TEXT — สำหรับเนื้อหาที่ยาวและเขียนได้อย่างอิสระ
  • CITEXT — เมื่อการเปรียบเทียบควรไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กเสมอ (เช่น อีเมล)

ชนิดคอลัมน์: ตัวเลข

สำหรับคอลัมน์ตัวเลข:

  • BIGINT สำหรับ ID และตัวนับ
  • NUMERIC(p, s) สำหรับจำนวนเงิน
  • REAL/DOUBLE PRECISION สำหรับงานวิทยาศาสตร์เท่านั้น

ชนิดคอลัมน์: เวลา

สำหรับคอลัมน์เวลา:

  • TIMESTAMPTZ สำหรับเหตุการณ์ (ค่าเริ่มต้น)
  • DATE สำหรับวันตามปฏิทิน (วันเกิด วันหยุด)
  • TIME สำหรับเวลาของวันโดยไม่มีวันที่ (เวลาเปิดทำการของร้าน)

ค่าบูลีนเทียบกับสถานะ

หากคอลัมน์มีสถานะที่อาจเกิดขึ้นในอนาคตมากกว่าสองแบบ ให้เลือกใช้ข้อความสถานะร่วมกับ CHECK แทนค่าบูลีน:

-- Will probably grow:
status TEXT NOT NULL CHECK (status IN ('draft','published','archived'))

-- vs the trap of "is_published BOOLEAN" when you later need a third state.

ข้อจำกัดที่ควรมีร่วมกัน

ทุกคอลัมน์ควรมี:

  • ชนิดข้อมูลที่แคบที่สุดและรองรับข้อมูลได้
  • NOT NULL เว้นแต่ NULL จะมีความหมาย
  • DEFAULT หากคอลัมน์มักมีค่าเดิมซ้ำ ๆ
  • CHECK หากมีกฎของขอบเขตข้อมูล
  • ดัชนี หากใช้ใน WHERE/JOIN/ORDER

ผลต่อการจัดเก็บข้อมูล

ชนิดข้อมูลที่แคบลง = แถวมีขนาดเล็กลง = มีแถวต่อหน้าเพิ่มขึ้น = อัตราการพบข้อมูลในแคชดีขึ้น การเปลี่ยน TEXT เป็น VARCHAR(20) ไม่ช่วยประหยัดพื้นที่ (ใช้พื้นที่จัดเก็บเท่ากัน) การเปลี่ยน BIGINT เป็น INT ลดความกว้างของคอลัมน์ลงครึ่งหนึ่ง

ชนิดของคีย์นอกต้องตรงกัน

ชนิดของคอลัมน์ FK ต้องตรงกับชนิดของ PK ที่อ้างอิงทุกประการ:

-- Wrong (silently won't use the index efficiently):
user_id INT REFERENCES users(id)   -- where users.id is BIGINT

-- Right:
user_id BIGINT REFERENCES users(id)

สรุปทบทวน

การเลือกชนิดข้อมูลคือการออกแบบ

  • ใช้ BIGSERIAL หรือ UUID สำหรับ PK
  • ใช้ NUMERIC สำหรับจำนวนเงิน
  • ใช้ TIMESTAMPTZ สำหรับเหตุการณ์
  • ใช้ TEXT ร่วมกับ CHECK สำหรับสถานะที่อาจเปลี่ยนแปลง
  • ใช้ NOT NULL เป็นค่าเริ่มต้น

ตรวจสอบความเข้าใจ

คุณกำลังจัดเก็บเวลาประทับของเหตุการณ์สำหรับผู้ใช้ในหลายเขตเวลา ควรใช้ชนิดใด

คำถามที่พบบ่อย

บทเรียน “การเลือกคีย์และชนิดข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเลือกคีย์และชนิดข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเลือกคีย์และชนิดข้อมูล”

เลือกคีย์หลัก BIGSERIAL หรือ UUID ตัดสินใจระหว่าง TEXT กับ VARCHAR(n) และเลือกชนิดข้อมูลที่เหมาะสมสำหรับทุกคอลัมน์ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเลือกคีย์และชนิดข้อมูล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างโมเดลบล็อก: ผู้ใช้ โพสต์ ความคิดเห็น
  2. การเลือกคีย์และชนิดข้อมูล
  3. ดัชนีสำหรับคำค้นที่พบบ่อย
  4. การเติมข้อมูลทดสอบลงฐานข้อมูล
← กลับไปที่ SQL Academy