BootCamp 8day

GyeongNamΒ·2023λ…„ 11μ›” 26일
0

BootCamp

λͺ©λ‘ 보기
8/49
post-thumbnail

πŸ“… 2023λ…„ 11μ›” 23일

[DB 6일차]


8일차: DB Modeling

DB ꡬ쑰λ₯Ό μ•½μ†λœ ν‘œκΈ°λ²•μ— μ˜ν•΄ ν‘œν˜„ν•˜κ³  섀계해 λ‚˜κ°€λŠ” 과정을 λ§ν•˜λ©° μ˜€λŠ˜μ€ ν•˜λ£¨μ’…μΌ λͺ¨λΈλ§μ— κ΄€ν•˜μ—¬ 배우고 μ‹€μŠ΅ν–ˆλ‹€.

κ°œλ…μ  λͺ¨λΈλ§ :

ERD(Entity Relationship Diagram) λ‹€μ΄μ–΄κ·Έλž¨μ„ 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰λ₯Ό μ‹œκ°ν™” ν•˜λ©°, 아직 좔상적인 단계

board_erd1

객체(Entity)λŠ” μ‚¬κ°ν˜•μœΌλ‘œ ν‘œν˜„ν•˜κ³  관계(Relationship)λŠ” λ§ˆλ¦„λͺ¨λ‘œ ν‘œν˜„ν•œλ‹€.


κ°œλ…μ  λͺ¨λΈλ§ :

ꡬ체적으둜 λ°μ΄ν„°λ² μ΄μŠ€ 섀계. 각 λ°μ΄ν„°μ˜ νƒ€μž…, 관계, key등을 μ§€μ •ν•˜λ©° μ—‘μ…€λ˜λŠ” ERDλ₯Ό μ‚¬μš©ν•œλ‹€.

board_erd2

pk = primary key
fk = foreign key


κ°œλ…μ  λͺ¨λΈλ§ :

μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“œλŠ” 과정이며 SQL을 μž‘μ„±ν•΄μ„œ λ§Œλ“ λ‹€.

CREATE Database ORDER_SYSTEM;

create table MEMEBERS(
    MEMEBERS_id BIGINT PRIMARY KEY AUTO_INCREMENT,  -- ID
    MEMEBERS_role enum('USER', 'ADMIN', 'SELLER') NOT NULL DEFAULT 'USER',   -- USER μ’…λ₯˜
    MEMEBERS_NAME varchar(255) NOT NULL,     -- USER 이름
    MEMEBERS_PHONE varchar(255) NOT NULL,    -- USER μ’…λ₯˜
    MEMEBERS_EMAIL varchar(255) NOT NULL     -- USER 메일
);

create table ITEMS(
    ITEMS_id BIGINT PRIMARY KEY AUTO_INCREMENT,     -- ID
    ITEMS_NAME VARCHAR(255)  NOT NULL,    -- μƒν’ˆ 이름
    ITEMS_PRICE BIGINT NOT NULL,     -- μƒν’ˆ 가격
    ITEMS_COUNT INT,        -- μƒν’ˆ 재고 수
    SELLER_id BIGINT NOT NULL,       -- 판맀자 ID
    FOREIGN KEY(SELLER_id) REFERENCES MEMEBERS(MEMEBERS_id) ON DELETE CASCADE
);

create table ORDERS(
    ORDER_id BIGINT PRIMARY KEY AUTO_INCREMENT,     -- κΈ°λ³Έν‚€
    USER_id BIGINT NOT NULL,     -- μ£Όλ¬Έν•œ μ‚¬λžŒμ˜ id
    MEMEBERS_ADDRESS_id BIGINT NOT NULL, -- 배솑지
    ORDERS_Progress enum('κ΅¬λ§€μš”μ²­', 'μƒν’ˆ 쀀비쀑', '배솑쀑', 'λ°°μ†‘μ™„λ£Œ') NOT NULL DEFAULT 'κ΅¬λ§€μš”μ²­',   -- μ£Όλ¬Έ μƒνƒœ
    FOREIGN KEY(USER_id) REFERENCES MEMEBERS(MEMEBERS_id),
    FOREIGN KEY(MEMEBERS_ADDRESS_id) REFERENCES MEMEBERS_ADDRESS(MEMEBERS_ADDRESS_id) 
);

create table ORDER_DETAILS(
    ORDER_DETAILS_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- κΈ°λ³Έν‚€
    ORDER_ITEM_COUNT INT NOT NULL,    -- ꡬ맀 갯수
    ORDER_id BIGINT NOT NULL,    -- μ£Όλ¬Έ id
    ITEMS_id BIGINT NOT NULL,    -- μƒν’ˆ id
    FOREIGN KEY(ORDER_id) REFERENCES ORDERS(ORDER_id),
    FOREIGN KEY(ITEMS_id) REFERENCES MEMEBERS(MEMEBERS_id)
);

create table MEMEBERS_ADDRESS(      -- 배솑지가 μ—¬λŸ¬ 곳일 κ°€λŠ₯μ„±
    MEMEBERS_ADDRESS_id BIGINT PRIMARY KEY AUTO_INCREMENT,
    MEMEBERS_SI VARCHAR(255) NOT NULL,
    MEMEBERS_DO VARCHAR(255) NOT NULL,
    MEMEBERS_DETAIL VARCHAR(255) NOT NULL,
    MEMEBERS_id BIGINT NOT NULL,
    FOREIGN KEY(MEMEBERS_id) REFERENCES MEMEBERS(MEMEBERS_id) ON DELETE CASCADE
);

--- ν…ŒμŠ€νŠΈ μˆœμ„œ

-- νšŒμ›κ°€μž… (판맀자)    : MEMEBERS INSERT
-- νšŒμ›κ°€μž… (ꡬ맀자)    : MEMEBERS INSERT

-- μƒν’ˆλ“±λ‘ (판맀자)    : ITEMS INSERT 
-- μƒν’ˆκ΅¬λ§€ (ꡬ맀자)
    -- 배솑지 μž…λ ₯         : MEMEBERS_ADDRESS INSERT
    -- κ΅¬λ§€λ‚΄μš© 등둝       : ORDERS INSERT
    -- κ΅¬λ§€μƒμƒˆ λ‚΄μš© 등둝   : ORDER_DETAILS INSERT
    -- μƒν’ˆ 재고 μˆ˜μ •       : ITEMS UPDATE

λ§Œλ“œλŠ” 것보닀 μƒκ°ν•˜λŠ”λ° μ‹œκ°„μ„ 더 많이 μ†ŒλΉ„ν–ˆλ‹€.
특히, 관계에 μžˆμ–΄ 1:1, 1:n, n:m인지 λ§Žμ€ 생각을 λ§Žμ΄ν–ˆκ³  또 λ°˜λ“œμ΄ μžˆμ–΄μ•Ό ν•˜λŠ” Mandatory인지 μ•„λ‹ˆλ©΄ μžˆκ±°λ‚˜ 없어도 μƒκ΄€μ—†λŠ” Optional인지 λ„ˆλ¬΄λ‚˜ ν—·κ°ˆλ Έλ‹€. μ΄λ²ˆμ—λŠ” λ°˜λ“œμ‹œ μ™„λ²½ν•˜κ²Œ κ°œλ…μ„ 작고 κ°€κ³ μž ν•œλ‹€.


github λ°μ΄ν„°λ² μ΄μŠ€ μ‹€μŠ΅ λ‚΄μš©

profile
503 Service Unavailable Error

0개의 λŒ“κΈ€