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()
);