Data
พจนานุกรมข้อมูล
พจนานุกรมข้อมูลบทที่ 3 — ฐาน abims · 11 ตาราง · 94 ฟิลด์ · กด「คัดลอกตาราง」แล้ววางใน Word ได้ทันที (TH SarabunPSK 16pt) · โครงสร้างละเอียดอยู่ใน 04-database.md
บทที่ 3
พจนานุกรมข้อมูล (Data Dictionary)
ผู้จัดทำได้ทำการศึกษาข้อมูลต่าง ๆ ที่เกี่ยวข้องกับระบบจองห้องประชุมและยืมอุปกรณ์ ABIMS พร้อมกำหนดโครงสร้างตารางข้อมูลไว้ในพจนานุกรมข้อมูล ซึ่งมีทั้งหมด 11 ตาราง 94 ฟิลด์ จัดกลุ่มตามแฟ้มข้อมูล D1 - D7 ในแผนภาพกระแสข้อมูล โดยมีรายละเอียดดังนี้
D1 แฟ้มข้อมูลผู้ใช้
ตารางที่ 3.1 ตารางบัญชีผู้ใช้ (tbl_users)
ใช้เก็บบัญชีผู้ใช้ทุกบทบาท (Admin, Manager, Employee) รวมข้อมูลส่วนตัว รหัสผ่าน และ OTP สำหรับลืมรหัสผ่าน
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | user_id | VARCHAR(12) | PK | NO | รหัสผู้ใช้ไม่ซ้ำ |
| 2 | username | VARCHAR(50) | UK | NO | ชื่อล็อกอิน |
| 3 | full_name | VARCHAR(150) | - | YES | ชื่อ-นามสกุล |
| 4 | gender | VARCHAR(22) | - | NO | เพศ |
| 5 | prefix | VARCHAR(22) | - | NO | คำนำหน้า |
| 6 | VARCHAR(150) | - | YES | อีเมล | |
| 7 | phone | VARCHAR(20) | - | YES | เบอร์โทร |
| 8 | birth_date | DATE | - | YES | วันเกิด |
| 9 | profile_image | VARCHAR(255) | - | YES | path/URL รูปโปรไฟล์ |
| 10 | password | VARCHAR(255) | - | NO | รหัสผ่าน bcrypt |
| 11 | reset_otp_hash | VARCHAR(64) | - | YES | แฮช OTP ลืมรหัส (NULL = ไม่มีคำขอ) |
| 12 | reset_otp_expires_at | DATETIME | - | YES | หมดอายุ OTP |
| 13 | reset_otp_attempts | INT(11) | - | NO | ครั้งใส่ OTP ผิด (ค่าเริ่มต้น 0) |
| 14 | status | TINYINT(1) | - | YES | 1 ใช้งาน, 0 ปิด (ค่าเริ่มต้น 1) |
| 15 | created_at | DATETIME | - | YES | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
| 16 | updated_at | DATETIME | - | YES | อัปเดตล่าสุด (ค่าเริ่มต้น เวลาปัจจุบัน) |
| 17 | role | TINYINT(1) | - | YES | 1 Admin, 2 Manager, 3 Employee (ค่าเริ่มต้น 2) |
D2 แฟ้มข้อมูลอุปกรณ์
ตารางที่ 3.2 ตารางหมวดหมู่อุปกรณ์ (tbl_categories)
ใช้เก็บหมวดหมู่ของอุปกรณ์ เพื่อจัดกลุ่มอุปกรณ์ในคลัง
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสหมวด |
| 2 | category_name | VARCHAR(100) | - | NO | ชื่อหมวด |
| 3 | icon | VARCHAR(50) | - | YES | ไอคอน Material (ค่าเริ่มต้น bookmark) |
| 4 | created_at | TIMESTAMP | - | NO | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
ตารางที่ 3.3 ตารางรายการอุปกรณ์ (tbl_equipments)
ใช้เก็บรายการอุปกรณ์ จำนวนทั้งหมด จำนวนที่ยืมได้ และเงื่อนไขการยืม
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสอุปกรณ์ |
| 2 | category_id | INT(11) | FK | NO | อ้างอิง tbl_categories.id |
| 3 | equipment_name | VARCHAR(255) | - | NO | ชื่ออุปกรณ์ |
| 4 | image_path | VARCHAR(255) | - | YES | รูป |
| 5 | total_quantity | INT(11) | - | NO | จำนวนทั้งหมด (ค่าเริ่มต้น 1) |
| 6 | available_quantity | INT(11) | - | NO | จำนวนที่ยืมได้ (ค่าเริ่มต้น 1) |
| 7 | comment | TEXT | - | YES | หมายเหตุ |
| 8 | status | TINYINT(1) | - | YES | 1 พร้อมใช้งาน, 3 ไม่พร้อมใช้งาน, 4 ซ่อมบำรุง (ค่าเริ่มต้น 1) |
| 9 | max_borrow_duration | INT(11) | - | NO | ยืมได้สูงสุด (วัน) (ค่าเริ่มต้น 1) |
| 10 | max_per_request | INT(11) | - | NO | ยืมต่อคำขอสูงสุด (ค่าเริ่มต้น 1) |
| 11 | created_at | TIMESTAMP | - | NO | วันที่เพิ่ม (ค่าเริ่มต้น เวลาปัจจุบัน) |
D3 แฟ้มข้อมูลการยืมอุปกรณ์
ตารางที่ 3.4 ตารางหัวคำขอยืมอุปกรณ์ (tbl_bookings)
ใช้เก็บหัวคำขอยืมอุปกรณ์ หนึ่งแถวคือหนึ่งคำขอ พร้อมสถานะ ผู้อนุมัติ และหลักฐานการคืน
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสคำขอ |
| 2 | user_id | VARCHAR(12) | FK | NO | อ้างอิง tbl_users (ผู้ยืม) |
| 3 | status | TINYINT(1) | - | YES | 1 รออนุมัติ, 2 กำลังยืม, 3 ปฏิเสธ, 4 คืนแล้ว, 5 ผู้ขอยกเลิก (ค่าเริ่มต้น 1) |
| 4 | approved_by | VARCHAR(12) | FK | YES | อ้างอิง tbl_users (ผู้ดำเนินการล่าสุด) |
| 5 | admin_mgr_notify_unread | TINYINT(1) | - | NO | แจ้งเตือน Admin ยังไม่เคลียร์ (ค่าเริ่มต้น 0) |
| 6 | reject_reason | TEXT | - | YES | เหตุผลปฏิเสธ |
| 7 | borrow_date | TIMESTAMP | - | NO | วันส่งคำขอ (ค่าเริ่มต้น เวลาปัจจุบัน) |
| 8 | return_date | TIMESTAMP | - | YES | กำหนดคืน (สถานะ 1–2), เวลาคืนจริง (สถานะ 4) |
| 9 | return_evidence | TEXT | - | YES | รูปหลักฐานตอนรับคืน 1–5 รูป, เก็บเป็น JSON list ของ path เช่น ["uploads/returns/a.jpg"], ข้อมูลเก่าอาจเป็น path เดียว |
ตารางที่ 3.5 ตารางรายการในคำขอยืม (tbl_booking_details)
ใช้เก็บรายการอุปกรณ์และจำนวนในแต่ละคำขอยืม
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสบรรทัด |
| 2 | booking_id | INT(11) | FK | NO | อ้างอิง tbl_bookings.id |
| 3 | equipment_id | INT(11) | FK | NO | อ้างอิง tbl_equipments.id |
| 4 | quantity | INT(11) | - | NO | จำนวน (ค่าเริ่มต้น 1) |
D4 แฟ้มข้อมูลห้องประชุม
ตารางที่ 3.6 ตารางห้องประชุม (tbl_rooms)
ใช้เก็บข้อมูลห้องประชุม ความจุ สิทธิ์การจอง และการตั้งค่าว่าต้องรออนุมัติหรือไม่
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสห้อง |
| 2 | room_name | VARCHAR(150) | - | NO | ชื่อห้อง |
| 3 | description | TEXT | - | YES | รายละเอียด |
| 4 | capacity | INT(11) | - | NO | ความจุ (คน) (ค่าเริ่มต้น 0) |
| 5 | allowed_roles | VARCHAR(50) | - | YES | บทบาทที่จองได้ (รหัส role คั่นด้วยจุลภาค) (ค่าเริ่มต้น 1,2,3) |
| 6 | image_path | VARCHAR(255) | - | YES | รูปห้อง |
| 7 | color_tag | VARCHAR(20) | - | YES | สีปฏิทิน (ค่าเริ่มต้น #3788d8) |
| 8 | status | TINYINT(1) | - | YES | 1 เปิด, 0 ปิดปรับปรุง (ค่าเริ่มต้น 1) |
| 9 | requires_booking_approval | TINYINT(1) | - | NO | 1 = รออนุมัติก่อนใช้ (ค่าเริ่มต้น 0) |
| 10 | created_at | TIMESTAMP | - | NO | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
| 11 | access_role | TINYINT(1) | - | NO | ระดับสิทธิ์ 1 Admin, 2 Manager, 3 ทุกบทบาท (ระบบปัจจุบันตรวจสิทธิ์จาก allowed_roles) (ค่าเริ่มต้น 3) |
D5 แฟ้มข้อมูลการจองห้อง
ตารางที่ 3.7 ตารางการจองห้อง (tbl_room_bookings)
ใช้เก็บการจองห้องประชุม ช่วงเวลา จำนวนผู้เข้าร่วม และสถานะการอนุมัติ
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสการจอง |
| 2 | user_id | VARCHAR(12) | FK | NO | อ้างอิง tbl_users |
| 3 | room_id | INT(11) | FK | NO | อ้างอิง tbl_rooms.id |
| 4 | title | VARCHAR(255) | - | NO | หัวข้อการประชุม |
| 5 | attendees | INT(11) | - | NO | จำนวนผู้เข้าร่วม (ค่าเริ่มต้น 1) |
| 6 | color_tag | VARCHAR(7) | - | YES | สี event |
| 7 | start_datetime | DATETIME | - | NO | เริ่ม |
| 8 | end_datetime | DATETIME | - | NO | สิ้นสุด |
| 9 | status | TINYINT(1) | - | YES | 1 รออนุมัติ, 2 อนุมัติ, 3 ปฏิเสธ, 4 ยกเลิก (ค่าเริ่มต้น 1) |
| 10 | approved_by | VARCHAR(12) | FK | YES | อ้างอิง tbl_users |
| 11 | reject_reason | TEXT | - | YES | เหตุผลปฏิเสธ |
| 12 | created_at | TIMESTAMP | - | NO | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
D6 แฟ้มข้อมูลปฏิทินและเวลาทำการ
ตารางที่ 3.8 ตารางบล็อกเวลา / วันหยุด (tbl_calendar_blocks)
ใช้เก็บช่วงเวลาที่ปิดการจอง เช่น วันหยุดบริษัทหรือปิดห้องชั่วคราว
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสบล็อก |
| 2 | room_id | INT(11) | FK | YES | อ้างอิง tbl_rooms (NULL = ทั้งบริษัท) |
| 3 | title_reason | VARCHAR(255) | - | NO | เหตุผลแสดงในปฏิทิน |
| 4 | block_type | TINYINT(1) | - | NO | 1 วันหยุดบริษัท, 2 ปิดห้อง (ค่าเริ่มต้น 2) |
| 5 | color_tag | VARCHAR(7) | - | YES | สี |
| 6 | start_datetime | DATETIME | - | NO | เริ่ม |
| 7 | end_datetime | DATETIME | - | NO | สิ้นสุด |
| 8 | created_by | VARCHAR(12) | FK | NO | อ้างอิง tbl_users.user_id (Admin ที่สร้าง) |
| 9 | created_at | TIMESTAMP | - | NO | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
ตารางที่ 3.9 ตารางชุดเวลาทำการ (tbl_time_presets)
ใช้เก็บชุดเวลาทำการ ระบบใช้ชุดที่เปิดใช้งานตรวจสอบเวลาจองห้อง
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสชุด |
| 2 | preset_name | VARCHAR(100) | - | NO | ชื่อชุด |
| 3 | is_active | TINYINT(1) | - | YES | 1 = ใช้ตรวจการจองอยู่ (ค่าเริ่มต้น 0) |
| 4 | created_at | TIMESTAMP | - | NO | วันที่สร้าง (ค่าเริ่มต้น เวลาปัจจุบัน) |
ตารางที่ 3.10 ตารางเวลาเปิด-ปิดรายวัน (tbl_time_preset_days)
ใช้เก็บเวลาเปิด-ปิดของแต่ละวันในสัปดาห์ของชุดเวลาทำการ
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสบรรทัด |
| 2 | preset_id | INT(11) | FK | NO | อ้างอิง tbl_time_presets.id |
| 3 | day_of_week | TINYINT(1) | - | NO | 0 อาทิตย์ … 6 เสาร์ |
| 4 | is_open | TINYINT(1) | - | YES | 1 เปิด, 0 ปิด (ค่าเริ่มต้น 1) |
| 5 | open_time | TIME | - | YES | เวลาเปิด (ค่าเริ่มต้น 08:00) |
| 6 | close_time | TIME | - | YES | เวลาปิด (ค่าเริ่มต้น 18:00) |
D7 แฟ้มข้อมูลการแจ้งเตือน
ตารางที่ 3.11 ตารางแจ้งเตือน (tbl_notifications)
ใช้เก็บการแจ้งเตือนของผู้ใช้ เช่น ผลการอนุมัติคำขอยืมและการจองห้อง
| ลำดับ | ชื่อฟิลด์ | ประเภทข้อมูล | คีย์ | Null | คำอธิบาย |
|---|---|---|---|---|---|
| 1 | id | INT(11) | PK | NO | รหัสแจ้งเตือน |
| 2 | user_id | VARCHAR(12) | FK | NO | อ้างอิง tbl_users.user_id (ผู้รับแจ้งเตือน) |
| 3 | booking_id | INT(11) | - | NO | รหัสคำขอยืม หรือรหัสการจองห้อง ตามประเภทการแจ้งเตือน |
| 4 | type | TINYINT(1) | - | NO | ประเภทการแจ้งเตือน (รหัสตัวเลขที่ระบบใช้แยกรูปแบบข้อความ) |
| 5 | message | TEXT | - | NO | ข้อความแจ้งเตือน |
| 6 | is_read | TINYINT(1) | - | YES | 1 อ่านแล้ว (ค่าเริ่มต้น 0) |
| 7 | created_at | TIMESTAMP | - | NO | เวลาแจ้ง (ค่าเริ่มต้น เวลาปัจจุบัน) |