이번 ERD는 천문 현상 관측 서비스를 구축하기 위한 데이터베이스 구조를 설계. 이 시스템은 사용자 데이터를 기반으로 맞춤형 관측 장소와 천문 현상 이벤트를 추천하며, 사용자는 개인 기록을 남길 수 있다.

CREATE TABLE User (
user_id INT AUTO_INCREMENT PRIMARY KEY, -- 고유 사용자 ID
name VARCHAR(100) NOT NULL, -- 사용자 이름
email VARCHAR(100) NOT NULL UNIQUE, -- 이메일 (Google 계정)
google_id VARCHAR(255) NOT NULL UNIQUE, -- Google 소셜 로그인 ID
latitude DECIMAL(10, 7), -- 선호 관측 위치 (위도)
longitude DECIMAL(10, 7), -- 선호 관측 위치 (경도)
preferred_time VARCHAR(50), -- 선호 관측 시간대 (아침, 저녁 등)
alert_enabled BOOLEAN DEFAULT TRUE, -- 천문 현상 알림 여부
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
user_id는 여러 테이블에서 외래키로 참조됨.CREATE TABLE ObservationRecord (
record_id INT AUTO_INCREMENT PRIMARY KEY, -- 고유 관측 기록 ID
user_id INT, -- 관측한 사용자 ID
event_id INT, -- 관측한 천문 현상 ID
observation_date DATETIME NOT NULL, -- 관측 날짜
latitude DECIMAL(10, 7), -- 관측 장소의 위도
longitude DECIMAL(10, 7), -- 관측 장소의 경도
observation_result TEXT, -- 관측 결과 (성공 여부, 메모 등)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (event_id) REFERENCES AstronomicalEvent(event_id)
);
CREATE TABLE AstronomicalEvent (
event_id INT AUTO_INCREMENT PRIMARY KEY, -- 고유 천문 현상 ID
event_name VARCHAR(100) NOT NULL, -- 천문 현상 이름 (ex. 일식, 월식 등)
start_time DATETIME NOT NULL, -- 천문 현상 시작 시각
end_time DATETIME NOT NULL, -- 천문 현상 종료 시각
latitude DECIMAL(10, 7), -- 이벤트 발생 위치 (위도)
longitude DECIMAL(10, 7), -- 이벤트 발생 위치 (경도)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE ObservationRecommendation (
recommendation_id INT AUTO_INCREMENT PRIMARY KEY, -- 고유 추천 ID
user_id INT, -- 추천 대상 사용자 ID
location_id INT, -- 추천된 장소 ID
recommended_time DATETIME, -- 추천된 시간
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (location_id) REFERENCES ObservationLocation(location_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE ObservationLocation (
location_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100), -- 관측 장소 이름
latitude DECIMAL(10, 7), -- 관측 장소 위도
longitude DECIMAL(10, 7), -- 관측 장소 경도
is_recommended BOOLEAN DEFAULT FALSE, -- 추천된 장소 여부
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE UserEventInterest (
user_id INT,
event_id INT,
PRIMARY KEY (user_id, event_id),
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (event_id) REFERENCES AstronomicalEvent(event_id)
);