ออกแบบตารางสำหรับกิจกรรมรายสัปดาห์
วิธีที่แนะนำคือสร้างคอลัมน์สำหรับแต่ละวันของสัปดาห์ โดยใช้ชนิดข้อมูล TINYINT(1) (0 = ไม่มีกิจกรรม, 1 = มีกิจกรรม)
โครงสร้างตาราง
CREATE TABLE WeeklyEventDemo (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EventName VARCHAR(20),
Monday TINYINT(1),
Tuesday TINYINT(1),
Wednesday TINYINT(1),
Thursday TINYINT(1),
Friday TINYINT(1),
Saturday TINYINT(1),
Sunday TINYINT(1),
StartDate DATE,
EndDate DATE
);
ตัวอย่างข้อมูล
INSERT INTO WeeklyEventDemo(EventName, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, StartDate, EndDate)
VALUES ('Event-1', 0, 0, 0, 0, 1, 0, 0, '2018-03-21', '2019-03-08');
INSERT INTO WeeklyEventDemo(EventName, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, StartDate, EndDate)
VALUES ('Event-2', 0, 0, 0, 0, 0, 1, 0, '2018-03-21', '2019-03-08');
สืบค้นกิจกรรมวันศุกร์
SELECT * FROM WeeklyEventDemo WHERE Friday = 1;
ข้อดีของรูปแบบนี้
- สืบค้นได้เร็วด้วย Index บนคอลัมน์วัน
- อ่านเข้าใจง่าย รองรับกิจกรรมซ้ำหลายวัน
- จัดการช่วงวันที่ได้ด้วย StartDate และ EndDate
ทางเลือกอื่น
สำหรับระบบซับซ้อนกว่านี้ อาจพิจารณาใช้ตารางแยก (EventDays) เชื่อมโยงด้วย Foreign Key แทน