유저 테이블(Users)
CREATE TABLE Users (
user_id NUMBER PRIMARY KEY,
social_type VARCHAR2(20) NOT NULL,
social_email VARCHAR2(100) NOT NULL,
name VARCHAR2(50) NOT NULL,
nickname VARCHAR2(30) NOT NULL,
gender VARCHAR2(10) NOT NULL,
birth_date DATE,
phone VARCHAR2(15),
address VARCHAR2(255),
greeting VARCHAR2(300),
profile_image VARCHAR2(255),
role VARCHAR2(20) DEFAULT 'USER' NOT NULL,
active CHAR(1) DEFAULT 'Y' NOT NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
CONSTRAINT chk_nickname CHECK (REGEXP_LIKE(nickname, '^[가-힣]{2,10}$')),
CONSTRAINT chk_phone CHECK (REGEXP_LIKE(phone, '^\\d{3}-\\d{3,4}-\\d{4}$')),
CONSTRAINT chk_greeting CHECK (LENGTH(greeting) <= 100),
CONSTRAINT chk_active CHECK (active IN ('Y', 'N'))
);
방문자 수 테이블(VisitorCount)
CREATE TABLE VisitorCount (
visitor_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL,
visitor_user_id NUMBER,
visitor_count NUMBER,
visit_date DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT fk_visitor_users FOREIGN KEY (user_id) REFERENCES users(user_id),
CONSTRAINT fk_visitor_visitor FOREIGN KEY (visitor_user_id) REFERENCES users(user_id)
);
팔로우 관계 테이블(Follow)
CREATE TABLE Follow (
follow_id NUMBER PRIMARY KEY,
follower_id NUMBER NOT NULL,
following_id NUMBER NOT NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
CONSTRAINT fk_follower FOREIGN KEY (follower_id) REFERENCES users(user_id),
CONSTRAINT fk_following FOREIGN KEY (following_id) REFERENCES users(user_id),
CONSTRAINT uq_follow UNIQUE (follower_id, following_id)
)
방명록 테이블(GuestBook)
CREATE TABLE GuestBook (
guestbook_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL, -- 방명록이 작성된 회원
writer_id NUMBER NOT NULL, -- 방명록을 작성한 회원
content VARCHAR2(500) NOT NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
CONSTRAINT fk_guestbook_users FOREIGN KEY (user_id) REFERENCES users(user_id),
CONSTRAINT fk_guestbook_writer FOREIGN KEY (writer_id) REFERENCES users(user_id)
);
소개 테이블(UsersInfo)
CREATE TABLE UsersInfo (
intro_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL,
content VARCHAR2(2000),
tags VARCHAR2(1000), -- #태그 형식의 관심사
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
CONSTRAINT fk_intro_users FOREIGN KEY (user_id) REFERENCES users(user_id),
CONSTRAINT uq_users_intro UNIQUE (user_id)
);
여행 버킷리스트 테이블(TravelBucket)
CREATE TABLE TravelBucket (
bucket_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL,
content VARCHAR2(500) NOT NULL,
is_completed CHAR(1) DEFAULT 'N' NOT NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
completed_at TIMESTAMP,
CONSTRAINT fk_bucket_users FOREIGN KEY (user_id) REFERENCES users(user_id),
CONSTRAINT chk_bucket_completed CHECK (is_completed IN ('Y', 'N'))
);
게시글 테이블(Post)