Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 주간 이벤트를 저장하는 가장 좋은 방법

MySQL에서 주간 이벤트 저장하기

MySQL에 주간 반복 이벤트를 효율적으로 저장하는 방법을 알아보겠습니다. 가장 일반적인 접근 방식은 요일별 필드를 포함하는 테이블을 생성하고, 각 요일에 해당 이벤트가 발생하는지 여부를 0 또는 1로 표시하는 것입니다.

1. 테이블 생성

먼저 요일별 필드와 이벤트 시작일·종료일을 포함하는 새로운 테이블을 생성합니다.

mysql> 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
    -> );
Query OK, 0 rows affected (0.55 sec)

각 요일 컬럼은 TINYINT(1) 타입으로 정의하여 불리언 값(0 = 해당 없음, 1 = 해당 요일에 이벤트 발생)을 저장합니다. StartDateEndDate는 이벤트가 유효한 기간을 나타냅니다.

2. 데이터 삽입

INSERT 명령어를 사용하여 테이블에 샘플 레코드를 삽입합니다.

mysql> 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');
Query OK, 1 row affected (0.14 sec)

mysql> 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');
Query OK, 1 row affected (0.16 sec)

위 예시에서 Event-1은 금요일(Friday=1)에, Event-2는 토요일(Saturday=1)에 반복되는 이벤트입니다.

3. 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> SELECT * FROM WeeklyEventDemo;

실행 결과는 다음과 같습니다.

+----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+
| 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 |
|  2 | Event-2   | 0      | 0       | 0         | 0        | 0      | 1        | 0      | 2018-03-21 | 2019-03-08 |
+----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+
2 rows in set (0.00 sec)

4. 특정 요일의 이벤트 조회하기

이제 특정 요일에 발생하는 주간 이벤트를 조회하는 쿼리를 살펴보겠습니다. 예를 들어 금요일에 해당하는 이벤트만 가져오려면 WHERE 조건절에 Friday = 1을 지정하면 됩니다.

mysql> 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 |
+----+-----------+--------+---------+-----------+----------+--------+----------+--------+------------+------------+
1 row in set (0.00 sec)

추가 팁: 실무에서 고려할 사항

  • 날짜 범위 조건 추가: 종료된 이벤트를 제외하려면 WHERE CURDATE() BETWEEN StartDate AND EndDate 조건을 함께 사용하는 것이 좋습니다.
  • 여러 요일 조회: 월요일과 수요일처럼 복수 요일의 이벤트를 찾으려면 WHERE Monday = 1 OR Wednesday = 1 형태로 작성할 수 있습니다.
  • 대안 설계: 요일별 컬럼 대신 이벤트 ID와 요일 번호(1~7)를 저장하는 별도의 매핑 테이블(정규화 방식)을 사용하면 확장성이 더 좋습니다.

이처럼 요일별 플래그 컬럼을 활용하면 주간 반복 이벤트를 직관적으로 저장하고, 간단한 WHERE 절로 원하는 요일의 이벤트를 빠르게 조회할 수 있습니다.