1. 테이블 스키마
1. 사용자 (users)
설명 |
컬럼명 |
타입 |
제약조건 |
설명 |
아이디 |
id |
UUID |
PK |
|
이메일 |
email |
VARCHAR(100) |
NOTNULL, UNIQUE |
|
비밀번호 |
password |
VARCHAR(100) |
NOT NULL |
|
역할 |
role |
VACHAR(50) |
NOT NULL |
|
생성 시각 |
created_at |
TIMESTAMP WITH TIME ZONE |
NOT NULL |
DERAULT NOW |
팔로워 수 |
follower_count |
BIGINT |
NOT NULL |
DEFAULT 0 |
팔로잉 수 |
following_count |
BIGINT |
NOT NULL |
DEFAULT 0 |
잠금 상태 |
locked |
BOOLEAN |
NOT NULL |
DEFAULT FALSE |
-- Users 테이블
CREATE TABLE users (
id UUID PRIMARY KEY,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
role VARCHAR(50) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
follower_count BIGINT NOT NULL DEFAULT 0,
following_count BIGINT NOT NULL DEFAULT 0,
locked BOOLEAN NOT NULL DEFAULT FALSE
);
2. 프로필 (profiles)
설명 |
컬럼명 |
타입 |
제약조건 |
설명 |
아이디 |
id |
UUID |
PK |
|
이름 |
name |
VARCHAR(50) |
NOT NULL |
|
성별 |
gender |
VARCHAR(10) |
|
|
생년월일 |
birth |
DATE |
|
|
온도 민감도 |
temperature_sensitivity |
INT |
|
|
사용자 아이디 |
user_id |
UUID |
FK |
NOT NULL, UNIQUE |
위치정보 아이디 |
weather_location_id |
UUID |
FK |
|
-- Profiles 테이블
CREATE TABLE profiles
(
id UUID PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10),
birth DATE,
temperature_sensitivity INT,
user_id UUID NOT NULL UNIQUE,
weather_location_id UUID,
CONSTRAINT fk_profiles_user FOREIGN KEY (user_id)
REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT fk_profiles_weather_locations FOREIGN KEY (weather_location_id)
REFERENCES weather_locations (id) ON DELETE SET NULL
);
3. 프로필 이미지 (profile_images)
설명 |
컬럼명 |
타입 |
제약조건 |
설명 |
아이디 |
id |
UUID |
PK |
|
이미지 키 |
object_key |
VARCHAR(255) |
|
|
원본 파일명 |
original_filename |
VARCHAR(255) |
|
|
파일 타입 |
content_type |
VARCHAR(50) |
|
|
크기 |
size |
BIGINT |
|
|
너비 |
width |
INT |
|
|
높이 |
height |
INT |
|
|
업로드 시간 |
uploaded_at |
TIMESTAMP WITH TIME ZONE |
|
defulat: now |
프로필 아이디 |
profile_id |
UUID |
FK |
|
-- profile_images 테이블
CREATE TABLE profile_images
(
id UUID PRIMARY KEY,
object_key VARCHAR(255),
original_filename VARCHAR(255),
content_type VARCHAR(50),
size BIGINT,
width INT,
height INT,
uploaded_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
profile_id UUID NOT NULL UNIQUE,
CONSTRAINT fk_profiles_images_profile FOREIGN KEY (profile_id)
REFERENCES profiles (id) ON DELETE CASCADE
);
4. 의상 (Clothes) / 의상 이미지(ClothesImage)
컬럼명 |
타입 |
제약조건 |
id |
UUID |
PK |
owner_id |
UUID |
FK, NOT NULL |
name |
VARCHAR(255) |
NOT NULL |
type |
VARCHAR(50) |
NOT NULL |
created_at |
TIMESTAMPZ |
NOT NULL |
— 의상 이미지 |
|
|
id |
UUID |
PK |
image_url |
TEXT |
NOT NULL |
file_name |
VARCHAR(255) |
|
content_type |
VARCHAR(100) |
|
size |
BIGINT |
|
width |
INT |
|
height |
INT |
|
upload_at |
TIMESTAMPTZ |
|
clothes_id |
UUID |
NOT NULL, UNIQUE |
CREATE TABLE clothes (
id UUID PRIMARY KEY,
owner_id UUID NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(50) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT fk_clothes_owner FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE
);
-- clothes_images 테이블
CREATE TABLE clothes_images (
id UUID PRIMARY KEY,
image_url TEXT NOT NULL,
file_name VARCHAR(255),
content_type VARCHAR(100),
size BIGINT,
width INT,
height INT,
upload_at TIMESTAMPTZ DEFAULT now(),
clothes_id UUID NOT NULL UNIQUE,
CONSTRAINT fk_clothes_images_clothes FOREIGN KEY (clothes_id) REFERENCES clothes(id) ON DELETE CASCADE
);
5. 의상 속성 정의 (ClothesAtrributeDefinitions)
컬럼명 |
타입 |
제약조건 |
id |
UUID |
PK |
name |
VARCHAR(255) |
NOT NULL, UNIQUE |
created_at |
TIMESTAMPZ |
NOT NULL |
CREATE TABLE clothes_attribute_definitions (
id UUID PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);