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