11/27 每日任務

需要必備的知識點

教練身份講解

在一個網頁平台上,會有多種角色,而在我們的任務二中的角色(role)會有:

  1. 一般客戶:USER
  2. 教練:COACH

在我們的線稿圖中,也有繪製如果他是教練角色時,他可以填寫自己的相關教練資料,其中欄位包含:

  1. 大頭照
  2. 教練姓名
  3. 教練資歷
  4. 教練簡介
  5. 專長(可複選)
    截圖 2024-11-26 下午11.40.24

資料庫預設資訊與欄位介紹

Untitled

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE "USER" (
  "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()),
  "name" varchar(50) NOT NULL,
  "email" varchar(320) UNIQUE NOT NULL,
  "role" varchar(20) NOT NULL,
  "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP),
  "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP)
);

CREATE TABLE "COACH" (
  "id" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
  "user_id" uuid NOT NULL REFERENCES "USER"(id),
  "experience_years" integer,
  "description" text,
  "profile_image_url" varchar(2048),
  "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP),
  "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP),
  UNIQUE("user_id")
);

CREATE TABLE "CREDIT_PACKAGE" (
  "id" serial PRIMARY KEY,
  "name" varchar(50) NOT NULL,
  "credit_amount" integer NOT NULL,
  "price" numeric(10,2) NOT NULL,
  "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP)
);

CREATE TABLE "CREDIT_PURCHASE" (
  "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()),
  "user_id" uuid NOT NULL REFERENCES "USER"(id),
  "credit_package_id" integer NOT NULL REFERENCES "CREDIT_PACKAGE"(id),
  "purchased_credits" integer NOT NULL,
  "price_paid" numeric(10,2) NOT NULL,
  "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP),
  "purchase_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP)
);

題目一

請先將 11/25 每日任務的使用者題目加入到資料庫指令後,再行答題

教練資料 ,資料表為 COACH

1. 新增:在 COACH 資料表新增三筆資料,資料需求如下:

  • 將用戶 李燕容 新增為教練,並且年資設定為2年(提示:使用 李燕容 的email ,取得 李燕容id
  • 將用戶肌肉棒子新增為教練,並且年資設定為2年(提示:使用 肌肉棒子 的email ,取得 肌肉棒子id
  • 將用戶Q太郎新增為教練,並且年資設定為2年(提示:使用 Q太郎 的email ,取得 Q太郎id

題目二:何謂一對多、一對一

解釋一對多關係

口訣:「多的要設定外來鍵」

流程:從欄位角度去規劃

  1. 以「使用者」角度:一個「使用者」會有多筆購買紀錄
  2. 以「購買紀錄」角度:一筆「購買紀錄」只會屬於 一個 使用者

➡️ 所以在「購買紀錄」表格(多的那方)設定外來鍵
截圖_2024-11-27_上午12_01_19

-- 一對多(使用者 -> 購買紀錄) 
CREATE TABLE "CREDIT_PURCHASE" (     
    "user_id" uuid NOT NULL REFERENCES "USER"(id),  -- 多的那方加外來鍵    
); 

解釋一對一關係

口訣:「外來鍵加唯一值」

流程:從欄位角度去規劃

  1. 以「使用者」角度:一個「使用者」最多只能是 一個 教練
  2. 以「教練」角度:一個「教練」只能對應到 一個 使用者

在雙方資料表都只能對應一個資訊時,則會是一對一的資料關係

➡️ 所以在「教練」表格設定外來鍵,並加上 UNIQUE 限制

-- 一對一(使用者 <-> 教練) 
CREATE TABLE "COACH" (     
    "user_id" uuid NOT NULL REFERENCES "USER"(id) 
    -- ...
    UNIQUE("user_id")  -- 外來鍵加唯一值 
);`

UNIQUE 意思:表示此 user_idCOACH 資料表上不能重複,因為一個「教練」只能對應到 一個 使用者

截圖 2024-11-27 上午12.09.17

題目二:使用者與部落格文章的資料表關係

請依照以下資料表線索,來分享:

  1. 你的分析流程,如下

流程:從欄位角度去規劃

以「」角度:一個「」有 ? 個 「」
以「」角度:一個「」有 ? 個 「」

  1. 依照上述描述,他是一對一關係、還是一對多?
    以「用戶」角度:一個「用戶」有 多 個 「文章」
    以「文章」角度:一個「文章」有 1 個 「用戶」
    所以文章設FK、用戶設PK

  2. 請下載下方資料表圖片後,用小畫家繪製線條(一對一一對多)

一對多

CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE "USER" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "name" varchar(50) NOT NULL, "email" varchar(320) UNIQUE NOT NULL, "role" varchar(20) NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE "BLOG_POST" ( "id" uuid PRIMARY KEY NOT NULL DEFAULT (gen_random_uuid()), "user_id" uuid NOT NULL REFERENCES "USER"(id), "title" varchar(255) NOT NULL, "content" text NOT NULL, "featured_image_url" varchar(2048), "category" varchar(20) NOT NULL, "spend_minutes" smallint NOT NULL, "created_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), "updated_at" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) );

截圖_2024-11-27_上午12_12_06

Select a repo