다 변경해야 하는 내용들.

팀원들과 이야기해야 함.

👤 Users

CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(), # UUID?
  email VARCHAR(255) UNIQUE NOT NULL,
  nickname VARCHAR(100), 
  password VARCHAR(255) NOT NULL,
  profile_image_url VARCHAR(255),
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
  last_login_at TIMESTAMP,
  
  INDEX idx_users_email (email),
  INDEX idx_users_created_at (created_at DESC) # 정렬을 위한..!
);

ID로 UUID를 사용할지.. 말지는 정해보면 좋을것 같아요!!

🏷️ Tags

CREATE TABLE tags (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(50) NOT NULL,
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,  -- NULL이면 시스템 태그
  -- color VARCHAR(7) DEFAULT '#3B82F6',  # color (태그별 색상?!)
  is_system BOOLEAN DEFAULT FALSE,  -- 시스템 제공 태그 여부
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  
  UNIQUE(user_id, name), -- 사용자별 태그명 중복 방지
  CREATE INDEX idx_tags_user_id ON tags(user_id),
  CREATE INDEX idx_tags_name ON tags(name),
  CREATE INDEX idx_tags_system ON tags(is_system) WHERE is_system = TRUE
);

📝 Records

CREATE TABLE records (
  -- 기본 정보
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID NOT NULL REFERENCES users(id)
  title VARCHAR(50) NOT NULL,
  content TEXT,
  location GEOGRAPHY(POINT, 4326),  # coordinates
  address VARCHAR(255),
  place_name VARCHAR(100),
  thumbnail_url VARCHAR(500),
  
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
  deleted_at TIMESTAMP,  # is_deleted, Soft delete
  
  INDEX idx_records_user_id (user_id),
  INDEX idx_records_created_at (created_at DESC),
  INDEX idx_records_user_date (user_id, created_at DESC),
  INDEX idx_records_deleted_at (deleted_at) WHERE deleted_at IS NOT NULL  
)