Skip to main content

ฐานข้อมูลลูกค้าอัปโหลด

ภาพรวม

Domain นี้มี 2 ตาราง: customer_database เก็บ metadata ของชุดข้อมูลลูกค้าที่อัปโหลดขึ้นมา (CSV) เช่น ชื่อชุดข้อมูล นิยามคอลัมน์ และจำนวนแถว ส่วน customer_database_row เก็บข้อมูลรายแถวในรูปแบบ JSONB ใช้สำหรับ user profile mapping — จับคู่ข้อมูลที่ผู้ใช้กรอกในฟอร์มกับข้อมูลลูกค้าที่มีอยู่แล้ว

ตาราง customer_database

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key ของชุดข้อมูล
line_oa_idINTEGERNOT NULLLINE OA channel ที่เป็นเจ้าของชุดข้อมูลนี้
nameTEXTNOT NULLชื่อชุดข้อมูลที่ผู้ใช้ตั้ง
descriptionTEXTNULLคำอธิบายเพิ่มเติมของชุดข้อมูล
columnsJSONBNOT NULLนิยามคอลัมน์ของชุดข้อมูล (ชื่อคอลัมน์ที่อ่านได้จากหัวตาราง CSV)
row_countINTEGERNOT NULL0จำนวนแถวข้อมูลในชุดนี้
statusVARCHAR(20)NOT NULL'active'สถานะของชุดข้อมูล (ค่าเริ่มต้น active)
created_byINTEGERNOT NULL0user id ของผู้อัปโหลด
created_atTIMESTAMPTZNOT NULLnow()วันที่อัปโหลด
updated_byINTEGERNULLuser id ของผู้แก้ไขล่าสุด
updated_atTIMESTAMPTZNULLวันที่แก้ไขล่าสุด

ตาราง customer_database_row

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key ของแถวข้อมูล
database_idINTEGERNOT NULLชุดข้อมูลที่แถวนี้สังกัด (FK ไป customer_database.id, ON DELETE CASCADE)
dataJSONBNOT NULLข้อมูลของแถวนั้น เก็บเป็น key-value ตามคอลัมน์ที่นิยามไว้ใน customer_database.columns

หมายเหตุ

  • ทั้งสองตารางไม่มีอยู่ใน schema.prisma — ถูกสร้างผ่าน manual SQL (manual-sql/6.customer_database.sql) และนำขึ้น preprod เมื่อ 2 กรกฎาคม 2026 จึงใช้ชื่อคอลัมน์ แบบ created_at/updated_at (ไม่ใช่ created_date/updated_date เหมือนตารางที่มาจาก Prisma) และ timestamp เป็น TIMESTAMPTZ โดยไม่ระบุ precision
  • Foreign key: customer_database_row.database_id -> customer_database.id แบบ ON DELETE CASCADE — ลบชุดข้อมูลแล้วแถวทั้งหมดจะถูกลบตาม
  • Index: customer_database_row_db_idx (btree บน database_id) และ customer_database_row_data_gin (GIN บน data ด้วย jsonb_path_ops) ตัวหลังใช้ค้นค่าภายใน JSON ของแต่ละแถวได้เร็วเมื่อจับคู่กับข้อมูลที่ผู้ใช้กรอก
  • ตารางเหล่านี้ทำงานร่วมกับคอลัมน์ profile_mapping (JSONB) ที่ถูกเพิ่มเข้าตาราง form_builder ในสคริปต์เดียวกัน ซึ่งเก็บ config ว่าฟอร์มไหนจับคู่กับชุดข้อมูลไหนและด้วยคอลัมน์ใด
  • customer_database ผูกกับ channel ผ่าน line_oa_id โดยตรง ไม่มีคอลัมน์ organization_id การกรองตามองค์กรจึงต้อง join ผ่าน line_oa