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 |
사용자 역할 (CUSTOMER , OWNER , MANAGER , MASTER ) |
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
)