วิธีเพิ่มฐานข้อมูลให้แอปของคุณ (โดยไม่ทำให้ข้อมูลหายในภายหลัง)
การเพิ่มฐานข้อมูลให้แอป ให้เลือกฐานข้อมูลเชิงสัมพันธ์แบบจัดการให้ (Postgres เป็นตัวเลือกที่นิยมที่สุด) เก็บสตริงการเชื่อมต่อไว้เป็นความลับฝั่งเซิร์ฟเวอร์ สร้างหนึ่งตารางต่อข้อมูลหนึ่งประเภทที่แอปเก็บ และให้แบ็กเอนด์เป็นตัวอ่านและเขียนข้อมูล ไม่ใช่เบราว์เซอร์ ถ้าคุณสร้างด้วยเครื่องมือ AI ส่วนใหญ่คุณเพียงพิมพ์ว่า "บันทึกสิ่งนี้ลงฐานข้อมูล" แล้วเอเจนต์จะตั้งค่าตารางและเขียนโค้ดให้ หน้าที่ของคุณคืออธิบายข้อมูลให้ชัดเจนและตรวจสอบว่าข้อมูลถูกบันทึกจริง
คู่มือนี้ครอบคลุมว่าเมื่อไรที่ต้องใช้ฐานข้อมูล ตัวเลือกหลัก วิธีอธิบายข้อมูล และข้อผิดพลาดที่ทำให้ข้อมูลสูญหายหรือรั่วไหล
เมื่อไรที่แอปของคุณต้องใช้ฐานข้อมูล
คุณต้องใช้ฐานข้อมูลเมื่อแอปต้อง จดจำ บางอย่างหลังจากปิดหน้าเว็บ หรือ แชร์ ข้อมูลระหว่างผู้คน สัญญาณทั่วไปมีดังนี้
- ผู้เข้าชมส่งบางอย่าง เช่น แบบฟอร์ม การสมัคร การจอง หรือคำสั่งซื้อ
- ผู้ใช้มีบัญชีพร้อมเนื้อหาที่บันทึกไว้ของตัวเอง
- ผู้ดูแลต้องเห็นหรือแก้ไขสิ่งที่คนอื่นสร้างไว้
- คุณต้องการรายงานหรือจำนวนที่นับตามช่วงเวลา
คุณไม่จำเป็นต้องใช้ฐานข้อมูลสำหรับเว็บไซต์แบบสแตติกที่ทุกคนเห็นเนื้อหาเดียวกัน เช่น พอร์ตโฟลิโอหรือหน้า landing แบบเรียบง่าย ถ้าคุณยังไม่แน่ใจว่าฐานข้อมูลคืออะไร ให้อ่าน ฐานข้อมูลคืออะไร ก่อน
ตัวเลือกของคุณ
| ตัวเลือก | คืออะไร | เหมาะกับ | ข้อแลกเปลี่ยน |
|---|---|---|---|
| ฐานข้อมูลในตัวจากเครื่องมือสร้างแอป | ฐานข้อมูลที่สร้างและเชื่อมต่อให้โปรเจกต์ | แอปส่วนใหญ่ที่สร้างด้วยเครื่องมือ AI | ผูกกับระบบโฮสต์ของแพลตฟอร์มนั้น การส่งออกและสำรองข้อมูลขึ้นกับแพลตฟอร์ม |
| Postgres หรือ MySQL แบบจัดการ | ฐานข้อมูลเชิงสัมพันธ์ที่โฮสต์ไว้ ซึ่งคุณสมัครแยกต่างหาก | แอปที่คุณโฮสต์เองหรือหลายบริการใช้ร่วมกัน | คุณต้องจัดการคีย์ จำนวนการเชื่อมต่อ และแพ็กเกจเอง |
| Backend-as-a-service | ฐานข้อมูลพร้อมระบบยืนยันตัวตน พื้นที่เก็บไฟล์ และ API ในผลิตภัณฑ์เดียว | แอปที่เน้นฝั่งหน้าบ้านและต้องการระบบล็อกอินสำเร็จรูป | มีแนวคิดเฉพาะของผู้ให้บริการที่ต้องเรียนรู้เพิ่ม |
| ฐานข้อมูลแบบเอกสาร (NoSQL) | เก็บเอกสารที่มีโครงสร้างยืดหยุ่นคล้าย JSON | ข้อมูลที่ไม่เป็นระเบียบมาก | ความสัมพันธ์และการทำรายงานทำได้ยากกว่า |
| สเปรดชีตเป็นฐานข้อมูล | Google Sheets หรือคล้ายกันผ่าน API | เครื่องมือภายในขนาดเล็กหรือต้นแบบ | ช้า ไม่มีข้อจำกัดของข้อมูลจริงจัง และพังเมื่อมีการแก้ไขพร้อมกัน |
สำหรับเว็บแอปขนาดเล็กถึงกลางส่วนใหญ่ ฐานข้อมูลเชิงสัมพันธ์อย่าง Postgres เป็นค่าเริ่มต้นที่เหมาะสม เพราะจัดการความสัมพันธ์ได้ดี รักษาความสอดคล้องของข้อมูล และทำให้คุณถามคำถามภายหลังด้วย SQL ได้ ดูภาพรวมแบบเข้าใจง่ายได้ที่ Postgres คืออะไร
อธิบายข้อมูลของคุณก่อนสร้าง
สิ่งที่มีประโยชน์ที่สุดที่คุณทำได้คือเขียนลงไปว่าแอปเก็บ สิ่งต่าง ๆ อะไรบ้าง และ สิ่งเหล่านั้นเชื่อมโยงกันอย่างไร คุณไม่จำเป็นต้องใช้ศัพท์ของฐานข้อมูล ตัวอย่างสำหรับแอปจองคิว:
- ลูกค้า: ชื่อ อีเมล เบอร์โทร
- บริการ: ชื่อ ระยะเวลา ราคา
- การจอง: ลูกค้าคนไหน บริการอะไร เวลาเริ่ม สถานะ (รอดำเนินการ ยืนยันแล้ว ยกเลิก)
นั่นคือสามตาราง "ลูกค้าคนไหน" และ "บริการอะไร" จะกลายเป็นการเชื่อมโยง (foreign key) ระหว่างตาราง การทำให้ถูกตั้งแต่ต้นสำคัญกว่าการเลือกเทคโนโลยีมาก เพราะการเปลี่ยนโครงสร้างของข้อมูลที่มีแถวจริงอยู่แล้วยากกว่าการเปลี่ยนเลย์เอาต์ของหน้าเว็บ
กฎง่าย ๆ บางข้อที่ควรยึด:
- หนึ่งตารางต่อข้อมูลหนึ่งประเภท อย่ายัดคำสั่งซื้อลงในคอลัมน์ข้อความของลูกค้า
- ให้ทุกแถวมี ID และเวลาที่สร้าง คุณจะต้องใช้ทั้งสองอย่างในภายหลัง
- ใช้ชนิดข้อมูลที่ถูกต้อง เก็บวันที่เป็นวันที่ เก็บเงินเป็นหน่วยย่อยที่เป็นจำนวนเต็ม (เช่น สตางค์) หรือชนิดทศนิยม ไม่เก็บเป็นข้อความ
- ระบุฟิลด์ที่จำเป็นให้ชัดเจน ให้ฐานข้อมูลปฏิเสธข้อมูลที่ไม่ถูกต้อง ไม่ใช่แค่ฟอร์ม
ตัวอย่างพรอมต์
เริ่มจากฟีเจอร์เดียวในแต่ละครั้ง แทนที่จะโยนสคีมาทั้งหมดลงไป:
เพิ่มฐานข้อมูลให้แอปนี้ สร้างตาราง bookings ที่มีชื่อลูกค้า อีเมล บริการ เวลาเริ่ม และสถานะ (pending, confirmed, cancelled; ค่าเริ่มต้นคือ pending) บันทึกข้อมูลจากฟอร์มการจองลงตารางนี้ แสดงข้อความสำเร็จ และเพิ่มหน้าแอดมินที่แสดงรายการการจองเรียงจากใหม่ไปเก่า
แล้วขยายต่อ:
เพิ่มตาราง services (ชื่อ ระยะเวลาเป็นนาที ราคาเป็นสตางค์) เปลี่ยนฟิลด์บริการแบบข้อความอิสระในตาราง bookings ให้เป็นการเชื่อมโยงกับ services และย้ายการจองที่มีอยู่โดยไม่ลบข้อมูล
และทำให้เข้มงวดขึ้น:
ตรวจสอบให้แน่ใจว่าการอ่านและเขียนฐานข้อมูลทั้งหมดเกิดขึ้นที่เซิร์ฟเวอร์ เบราว์เซอร์ต้องไม่ได้รับสตริงการเชื่อมต่อฐานข้อมูลเด็ดขาด ตรวจสอบอีเมลและเวลาเริ่มที่เซิร์ฟเวอร์ก่อนบันทึก
ขั้นตอนทีละขั้น
- แสดงรายการข้อมูลของคุณ ตามที่อธิบายข้างต้น: สิ่งต่าง ๆ ฟิลด์ และการเชื่อมโยงระหว่างกัน
- สร้างฐานข้อมูล ในเครื่องมือสร้างแอป AI ให้ขอในแชต ที่อื่นให้สร้าง Postgres แบบจัดการแล้วคัดลอกสตริงการเชื่อมต่อ
- เก็บสตริงการเชื่อมต่อเป็นความลับ (ตัวแปรสภาพแวดล้อมฝั่งเซิร์ฟเวอร์) อย่าใส่ในโค้ด ดู ตัวแปรสภาพแวดล้อมและความลับ
- สร้างตาราง ใช้ migration ซึ่งเป็นสคริปต์ที่มีเวอร์ชันสำหรับเปลี่ยนสคีมา เพื่อให้การเปลี่ยนแปลงทำซ้ำได้และย้อนกลับได้
- สร้างเส้นทางของเซิร์ฟเวอร์ ที่สร้าง อ่าน แก้ไข และลบแถว (CRUD) เบราว์เซอร์เรียกเส้นทางเหล่านี้ และไม่เคยคุยกับฐานข้อมูลโดยตรง
- เชื่อม UI เข้ากับเส้นทางเหล่านั้น ทั้งฟอร์มที่บันทึกข้อมูล รายการที่โหลดข้อมูล และสถานะว่างเมื่อยังไม่มีข้อมูล
- ทดสอบการคงอยู่ของข้อมูล ส่งข้อมูลบางอย่าง รีโหลดหน้า แล้วเปิดในเบราว์เซอร์อีกตัว ถ้าข้อมูลไม่อยู่ แสดงว่ายังไม่ได้บันทึกลงฐานข้อมูล
- ตรวจสอบสิทธิ์การเข้าถึง ล็อกอินด้วยผู้ใช้คนที่สองและยืนยันว่าดูหรือแก้ไขข้อมูลของผู้ใช้คนแรกไม่ได้
- เผยแพร่ แล้วทดสอบอีกครั้ง บน URL จริง เพราะแอปที่เผยแพร่แล้วอาจใช้การเชื่อมต่อคนละตัวกับตัวอย่างที่ใช้ระหว่างพัฒนา
ข้อผิดพลาดที่พบบ่อย
- บันทึกลงเบราว์เซอร์แล้วคิดว่าบันทึกลงฐานข้อมูลแล้ว localStorage ดูเหมือนทำงานได้จนกว่าจะมีคนเปิดแอปบนอุปกรณ์อื่น ควรทดสอบในเบราว์เซอร์ตัวที่สองเสมอ
- ใส่สตริงการเชื่อมต่อในโค้ดฝั่งหน้าบ้าน ใครก็อ่านโค้ดฝั่งหน้าบ้านได้ ซึ่งจะให้สิทธิ์เข้าถึงฐานข้อมูลทั้งหมดแก่เขา
- ไม่มีการตรวจสอบสิทธิ์ "แสดงคำสั่งซื้อของฉัน" ต้องกรองตามผู้ใช้ที่ล็อกอินอยู่ที่เซิร์ฟเวอร์ ไม่ใช่ในหน้า UI นี่คือช่องโหว่ด้านความปลอดภัยที่พบบ่อยที่สุดในแอปที่สร้างด้วย AI ดู เช็กลิสต์ความปลอดภัยสำหรับแอปที่สร้างด้วย AI ที่ครอบคลุมเรื่องนี้
- การเปลี่ยนสคีมาแบบทำลายข้อมูล การขอให้ "เปลี่ยนชื่อตาราง" หรือ "เปลี่ยนโครงสร้าง" อาจทำให้ตารางถูกลบแล้วสร้างใหม่ เมื่อมีข้อมูลจริงอยู่ ให้บอกว่า "ย้ายแถวที่มีอยู่ ห้ามลบข้อมูลใด ๆ"
- เก็บไฟล์ไว้ในฐานข้อมูล รูปภาพและ PDF ควรอยู่ในพื้นที่เก็บไฟล์ และเก็บเฉพาะ URL หรือคีย์ของไฟล์ไว้ในตาราง ดู วิธีเพิ่มการอัปโหลดไฟล์ให้แอปของคุณ
- ไม่มีการสำรองข้อมูล ก่อนมีลูกค้า ให้รู้ว่าแพลตฟอร์มของคุณสำรองข้อมูลอย่างไร และจะกู้คืนได้อย่างไร
เช็กลิสต์
- ข้อมูลแต่ละประเภทมีตารางของตัวเองพร้อม ID และเวลาที่สร้าง
- ฐานข้อมูลบังคับใช้ฟิลด์ที่จำเป็นและชนิดข้อมูล
- สตริงการเชื่อมต่ออยู่ในความลับฝั่งเซิร์ฟเวอร์เท่านั้น
- การอ่านและเขียนทั้งหมดผ่านเส้นทางของเซิร์ฟเวอร์
- ผู้ใช้แต่ละคนอ่านและแก้ไขได้เฉพาะแถวของตัวเอง
- ข้อมูลยังอยู่หลังรีโหลด และแสดงในเบราว์เซอร์อีกตัว
- การเปลี่ยนสคีมาใช้ migration และรักษาแถวที่มีอยู่
- คุณรู้วิธีการสำรองและกู้คืนข้อมูล
- ทดสอบแอปจริงหลังจากเผยแพร่แล้ว
การเพิ่มฐานข้อมูลใน Mythex
ใน Mythex แต่ละโปรเจกต์สามารถมี ฐานข้อมูล Postgres เฉพาะ ของตัวเองได้ ทั้งในแพ็กเกจ Free และ Pro โดยปกติคุณไม่ต้องกดปุ่ม "แนบ" แยกต่างหาก เพียงขอในแชต (เช่น "บันทึกอีเมลรายชื่อรอในฐานข้อมูล") หรือพิมพ์ /database ระบบจะใส่ข้อมูลการเชื่อมต่อให้พื้นที่ทำงานและแอปที่เผยแพร่แล้ว การตั้งค่าโปรเจกต์จะแสดงว่าฐานข้อมูลเปิดใช้งานอยู่หรือไม่
ฐานข้อมูลจะเข้าสู่โหมดพักเมื่อไม่มีการใช้งาน 5 นาที และจะตื่นเมื่อมีคำขอถัดไป การใช้งานหลังเผยแพร่จะคิดตามเวลาที่ฐานข้อมูลทำงานจริง โดยหักจากยอดเครดิตเดียวกับที่ใช้สร้างแอป หากคุณเพิ่มฐานข้อมูลหลังจากเผยแพร่แล้ว ให้เผยแพร่อีกครั้งเพื่อให้แอปที่ใช้งานอยู่รับการเปลี่ยนแปลงนี้
ดู Database และสูตร Build a CRUD app ในเอกสาร สำหรับด้านการล็อกอินของข้อมูลรายผู้ใช้ ให้อ่าน วิธีเพิ่มระบบล็อกอินให้แอปของคุณ
คำถาม
แอปของฉันจำเป็นต้องมีฐานข้อมูลไหม?
จำเป็นทันทีที่แอปต้องจดจำบางอย่างระหว่างการเข้าชมแต่ละครั้ง หรือต้องแชร์ข้อมูลระหว่างผู้ใช้ เช่น การสมัครสมาชิก คำสั่งซื้อ การจอง โพสต์ หรือการตั้งค่า เว็บไซต์แบบสแตติกที่แสดงเนื้อหาเดิมให้ทุกคนเห็นไม่จำเป็นต้องมีฐานข้อมูล
ควรใช้ฐานข้อมูลอะไรสำหรับเว็บแอปขนาดเล็ก?
ฐานข้อมูลเชิงสัมพันธ์อย่าง Postgres เป็นตัวเลือกเริ่มต้นที่ปลอดภัยสำหรับเว็บแอปขนาดเล็กส่วนใหญ่ รองรับผู้ใช้ คำสั่งซื้อ ความสัมพันธ์ระหว่างข้อมูล และการทำรายงานได้ดี มีผู้ให้บริการรองรับจำนวนมาก และในระดับขนาดเล็กแทบไม่ต้องกังวลว่าจะเกินความสามารถ
เก็บข้อมูลในเบราว์เซอร์แทนฐานข้อมูลได้ไหม?
พื้นที่เก็บข้อมูลของเบราว์เซอร์ เช่น localStorage ใช้ได้เฉพาะในอุปกรณ์และเบราว์เซอร์นั้น และผู้ใช้จะล้างเมื่อไรก็ได้ เหมาะกับการตั้งค่าเล็ก ๆ เช่น การเลือกธีม แต่ไม่เหมาะกับข้อมูลที่คุณหรือผู้ใช้คนอื่นต้องเห็นในภายหลัง
Mythex มีฐานข้อมูลให้ไหม?
มี โปรเจกต์ใน Mythex ได้รับฐานข้อมูล Postgres เฉพาะของตัวเองในแพ็กเกจ Free และ Pro คุณขอได้ในแชตหรือใช้คำสั่ง /database ระบบจะใส่ข้อมูลการเชื่อมต่อให้โดยอัตโนมัติ การใช้งานจะหักจากยอดเครดิตเดียวกับที่ใช้สร้างแอป