App 개발 일지/Nutri Capture

Nutri Capture 백엔드 - ERD

interfacer_han 2023. 12. 22. 13:26

#1 ERD

필수적인 테이블만 만들었다. 나중에 테이블을 추가해 넣을 가능성이 아주 높기에, 모든 테이블을 Non-Identifying Relationship으로 연결했다. 각 테이블의 모든 기본키는 AUTOINCREMENT가 Default값이다. nutrient 테이블은 100g 당 함유된 영양소가 기준이다. nutrient 테이블의 외래키 f_num는 UNIQUE KEY이고, 외래키 제약 조건인 ON CASCADE DELETE을 달아두었다.

 

#2 코드 - SQLite

CREATE TABLE user ( -- 사용자
    u_num   INTEGER PRIMARY KEY AUTOINCREMENT, -- 사용자 번호
    u_name  TEXT, -- 닉네임
    u_sex   TEXT NOT NULL DEFAULT 'n', -- 성별
    u_height REAL, -- 키
    u_weight REAL -- 몸무게
);

CREATE TABLE food ( -- 음식
    f_num           INTEGER PRIMARY KEY AUTOINCREMENT, -- 음식 번호
    u_num           INTEGER NOT NULL, -- 사용자 번호 (외래키)
    c_num           INTEGER NOT NULL, -- 음식 카테고리 (외래키)
    f_name          TEXT NOT NULL DEFAULT '이름 없음', -- 음식 이름
    f_time          TEXT NOT NULL DEFAULT (datetime('now','localtime')), -- 등록한 시각
    f_total_amount  REAL, -- 음식의 총 중량 (g)
    f_percent       REAL NOT NULL DEFAULT 100, -- 음식을 얼마나 먹었는지의 퍼센트 (%)
    FOREIGN KEY (u_num) REFERENCES user(u_num),
    FOREIGN KEY (c_num) REFERENCES category(c_num)
);

CREATE TABLE category ( -- 음식 카테고리
    c_num          INTEGER PRIMARY KEY AUTOINCREMENT, -- 음식 카테고리 번호
    c_name_level_1 TEXT NOT NULL, -- 음식 1차 분류
    c_name_level_2 TEXT NOT NULL -- 음식 2차 분류
);

CREATE TABLE nutrient ( -- 100g 당 영양소
    n_num           INTEGER PRIMARY KEY AUTOINCREMENT, -- 영양소 번호
    f_num           INTEGER UNIQUE NOT NULL, -- 음식 번호 (외래키)
    n_calories      REAL, -- 캍로리 (kcal)
    n_sodium        REAL, -- 나트륨 (mg)
    n_carbohydrate  REAL, -- 탄수화물 (g)
    n_sugars        REAL, -- 당류 (g)
    n_total_fat     REAL, -- 지방 (g)
    n_trans_fat     REAL, -- 트랜스지방 (g)
    n_saturated_fat REAL, -- 탄수화물 (g)
    n_cholesterol   REAL, -- 콜레스테롤 (mg)
    n_protein       REAL, -- 단백질 (g)
    FOREIGN KEY (f_num) REFERENCES food(f_num) ON DELETE CASCADE
);