사용자 테이블 (p_users)

필드 이름 데이터 타입 설명
user_id UUID 사용자 ID (PK)
email VARCHAR(255) 이메일 Unique Key
password VARCHAR(255) 사용자 비밀번호
username VARCHAR(100) 사용자 이름
phone_number VARCHAR(20) 사용자 핸드폰 번호
nickname VARCHAR(100) 사용자 닉네임, Unique Key
role ENUM 사용자 역할 (CUSTOMEROWNERMANAGERMASTER)
is_public BOOLEAN 사용자 정보가 공개된 상태인지 여부, 기본값 TRUE
is_block BOOLEAN 사용자 계정 정지 여부, 기본값 FALSE
profile_url TEXT 프로필 url
created_at TIMESTAMP 레코드 생성 시간, DEFAULT CURRENT_TIMESTAMP
created_by VARCHAR(100) 레코드 생성자 (system)
updated_at TIMESTAMP 레코드 수정 시간, ON UPDATE CURRENT_TIMESTAMP
updated_by VARCHAR(100) 레코드 수정자 (user_id)
deleted_at TIMESTAMP 레코드 삭제 시간
deleted_by VARCHAR(100) 레코드 삭제자 (user_id)

<aside> 💡

CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- ENUM 타입 생성 DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'user_role') THEN CREATE TYPE user_role AS ENUM ('CUSTOMER', 'OWNER', 'MANAGER', 'MASTER'); END IF; END $$; DO -- 테이블 생성 CREATE TABLE p_users ( user_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, username VARCHAR(100) NOT NULL, phone_number VARCHAR(20), nickname VARCHAR(100) NOT NULL UNIQUE, role user_role NOT NULL, is_public BOOLEAN NOT NULL DEFAULT TRUE, is_block BOOLEAN NOT NULL DEFAULT FALSE, profile_url TEXT, created_at TIMESTAMP NOT NULL DEFAULT NOW(), created_by VARCHAR(100), updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_by VARCHAR(100), deleted_at TIMESTAMP, deleted_by VARCHAR(100) );

CREATE TABLE p_users ( usr_UUID UUID PRIMARY KEY, email VARCHAR(255) UNIQUE, password VARCHAR(255), username VARCHAR(100), phone_number VARCHAR(20), nickname VARCHAR(100) UNIQUE, role ENUM('CUSTOMER', 'OWNER', 'MANAGER', 'MASTER'), is_public BOOLEAN DEFAULT TRUE, is_block BOOLEAN DEFAULT FALSE, profile_url TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_by VARCHAR(100), deleted_at TIMESTAMP, deleted_by VARCHAR(100) );

</aside>

음식점 테이블 (p_restaurants)

필드 이름 데이터 타입 설명
restaurant_id UUID 음식점 ID (PK)
category_id UUID 음식점 카테고리 ID (FK)
user_id UUID 음식점 소유자 (FK)
area ENUM 가게 지역(영등포, 노원구 등등 )
is_opened BOOLEAN 음식점 운영 상태( OPEN, CLOSE ) 디폴트 True
restaurant_name VARCHAR(255) 음식점 이름
restaurant_address VARCHAR(255) 음식점 주소
restaurant_phone_number VARCHAR(255) 음식점 전화번호
restaurant_introduce TEXT 음식점 소개
restaurant_image_url TEXT 이미지 url
created_at TIMESTAMP 레코드 생성 시간
created_by VARCHAR(100) 레코드 생성자 (user_id)
updated_at TIMESTAMP 레코드 수정 시간
updated_by VARCHAR(100) 레코드 수정자 (user_id)
deleted_at TIMESTAMP 레코드 삭제 시간
deleted_by VARCHAR(100) 레코드 삭제자 (user_id)

<aside> 💡

CREATE TABLE p_restaurants ( restaurant_id VARCHAR(36) PRIMARY KEY, -- UUID with 'rst_' prefix category_id VARCHAR(36), -- Foreign Key to p_categories (cat_ prefix) user_id VARCHAR(36), -- Foreign Key to p_users (usr_ prefix) area ENUM('영등포', '노원구', '강남구', '서초구', '종로구'), -- Example values is_opened BOOLEAN DEFAULT TRUE, restaurant_name VARCHAR(255) NOT NULL, restaurant_address VARCHAR(255), restaurant_phone_number VARCHAR(20), restaurant_introduce TEXT, restaurant_image_url TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_by VARCHAR(100), deleted_at TIMESTAMP, deleted_by VARCHAR(100),

-- Foreign Key Constraints
CONSTRAINT fk_category
    FOREIGN KEY (category_id)
    REFERENCES p_categories (category_id),

CONSTRAINT fk_user
    FOREIGN KEY (user_id)
    REFERENCES p_users (user_id),

-- Indexes
INDEX idx_category_id (category_id),
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at),
INDEX idx_updated_at (updated_at)

);

</aside>

음식점 카테고리 테이블 (p_restaurant_categories)

필드 이름 데이터 타입 설명
category_id UUID 음식점 카테고리 ID (PK)
category_title VARCHAR(50) 카테고리 이름 (ex. 한식, 중식 등)
created_at TIMESTAMP 레코드 생성 시간
created_by VARCHAR(100) 레코드 생성자 (user_id)
updated_at TIMESTAMP 레코드 수정 시간
updated_by VARCHAR(100) 레코드 수정자 (user_id)
deleted_at TIMESTAMP 레코드 삭제 시간
deleted_by VARCHAR(100) 레코드 삭제자 (user_id)

<aside> 💡

CREATE TABLE p_categories ( category_id VARCHAR(36) PRIMARY KEY, -- UUID with 'cat_' prefix category_title VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_by VARCHAR(100), deleted_at TIMESTAMP, deleted_by VARCHAR(100) );

</aside>

음식 정보 테이블 (p_food_infos)

필드 이름 데이터 타입 설명
food_info_id UUID 음식 아이템 ID (PK)
restaurant_id UUID 음식점 ID (FK)
food_info_title VARCHAR(255) 음식 아이템 이름
food_info_desc TEXT 음식 아이템 설명
food_info_price DECIMAL(10,2) 음식 아이템 가격
is_hidden BOOLEAN 음식 아이템 숨김 여부, 기본값 FALSE
is_sale BOOLEAN 음식 판매 가능 여부(판매가능, 품절), 기본값 TRUE
option VARCHAR(255) 옵션 (소스 추가, 밥 추가)
created_at TIMESTAMP 레코드 생성 시간
created_by VARCHAR(100) 레코드 생성자 (user_id)
updated_at TIMESTAMP 레코드 수정 시간
updated_by VARCHAR(100) 레코드 수정자 (user_id)
deleted_at TIMESTAMP 레코드 삭제 시간
deleted_by VARCHAR(100) 레코드 삭제자 (user_id)

<aside> 💡

CREATE TABLE p_food_infos ( food_info_id VARCHAR(36) PRIMARY KEY, -- 음식 아이템 ID (UUID with 'foi_' prefix) restaurant_id VARCHAR(36), -- 음식점 ID (Foreign Key, UUID with 'rst_' prefix) food_info_title VARCHAR(255) NOT NULL, -- 음식 아이템 이름 food_info_desc TEXT, -- 음식 아이템 설명 food_info_price DECIMAL(10, 2) NOT NULL, -- 음식 아이템 가격 is_hidden BOOLEAN DEFAULT FALSE, -- 음식 아이템 숨김 여부, 기본값 FALSE is_sale BOOLEAN DEFAULT TRUE, -- 음식 판매 가능 여부, 기본값 TRUE option VARCHAR(255), -- 옵션 (소스 추가, 밥 추가) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 레코드 생성 시간 created_by VARCHAR(100), -- 레코드 생성자 (username) updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 레코드 수정 시간 updated_by VARCHAR(100), -- 레코드 수정자 (username) deleted_at TIMESTAMP, -- 레코드 삭제 시간 deleted_by VARCHAR(100), -- 레코드 삭제자 (username)

-- Foreign Key Constraints
CONSTRAINT fk_restaurant
    FOREIGN KEY (restaurant_id)
    REFERENCES p_restaurants (restaurant_id),

-- Indexes
INDEX idx_restaurant_id (restaurant_id),
INDEX idx_food_info_title (food_info_title),
INDEX idx_is_hidden (is_hidden),
INDEX idx_is_sale (is_sale),
INDEX idx_created_at (created_at),
INDEX idx_updated_at (updated_at)

);

INSERT INTO p_food_infos (food_info_id, restaurant_id, food_info_title, food_info_desc, food_info_price, is_hidden, is_sale, option, created_by) VALUES ('foi_123e4567-e89b-12d3-a456-426614174000', 'rst_123e4567-e89b-12d3-a456-426614174000', 'Spaghetti', 'Delicious Italian pasta', 12.99, FALSE, TRUE, 'Extra cheese', 'admin');

</aside>

주문 테이블 (p_orders)