MySQL में साप्ताहिक पुनरावृत्ति वाले इवेंट स्टोर करने का डिज़ाइन पैटर्न
साप्ताहिक इवेंट (जैसे "हर शुक्रवार को मीटिंग") को स्टोर करने का सबसे सरल और कुशल तरीका प्रत्येक सप्ताह के दिन के लिए एक बूलियन कॉलम (TINYINT) रखना है।
टेबल संरचना
CREATE TABLE WeeklyEventDemo (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EventName VARCHAR(20),
Monday TINYINT(1) DEFAULT 0,
Tuesday TINYINT(1) DEFAULT 0,
Wednesday TINYINT(1) DEFAULT 0,
Thursday TINYINT(1) DEFAULT 0,
Friday TINYINT(1) DEFAULT 0,
Saturday TINYINT(1) DEFAULT 0,
Sunday TINYINT(1) DEFAULT 0,
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'),
('Event-2', 0, 0, 0, 0, 0, 1, 0, '2018-03-21', '2019-03-08');
किसी विशेष दिन के इवेंट क्वेरी करना
SELECT * FROM WeeklyEventDemo WHERE Friday = 1;
आउटपुट
+----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+ | ID | EventName | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday | StartDate | EndDate | +----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+ | 1 | Event-1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 2018-03-21 | 2019-03-08 | +----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+
इस डिज़ाइन के लाभ
- सरल क्वेरी: किसी दिन के इवेंट के लिए केवल
WHERE Friday = 1लिखना पड़ता है। - इंडेक्सिंग: प्रत्येक दिन कॉलम पर इंडेक्स बनाकर तेज़ खोज संभव।
- डेट रेंज:
StartDateऔरEndDateसे इवेंट की वैधता अवधि नियंत्रित होती है। - स्टोरेज: TINYINT(1) केवल 1 बाइट लेता है, 7 कॉलम = 7 बाइट्स प्रति रो।
वैकल्पिक दृष्टिकोण
अधिक जटिल पैटर्न (जैसे "महीने का पहला सोमवार") के लिए अलग recurrence_rules टेबल या JSON कॉलम का उपयोग करें।