#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
);
'App 개발 일지 > Nutri Capture' 카테고리의 다른 글
Nutri Capture 프론트엔드 - Scaffold (0) | 2024.09.25 |
---|---|
Nutri Capture 방향성 - 살아남는 앱이 되려면 (0) | 2024.09.22 |
Nutri Capture 방향성 - UI 스케치 (0) | 2023.12.23 |
Nutri Capture 방향성 - 앱의 목적, 유스케이스 다이어그램 (0) | 2023.12.20 |
Nutri Capture 방향성 - 앱의 리팩토링 및 업그레이드 (0) | 2023.12.19 |