유저 테이블(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)