1. DDL

-- 4) 코드 테이블: category (관리자 관리 코드)
CREATE TABLE category (
    category_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL UNIQUE
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 1) 마스터: customer
CREATE TABLE customer (
    customer_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name  VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 1) 마스터: product
CREATE TABLE product (
    product_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    category_id BIGINT NOT NULL,
    name  VARCHAR(100) NOT NULL,
    price INT NOT NULL,
    stock INT NOT NULL,
    CONSTRAINT fk_product_category
        FOREIGN KEY (category_id) REFERENCES category(category_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 2) 트랜잭션: orders
CREATE TABLE orders (
    order_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    customer_id BIGINT NOT NULL,
    ordered_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_orders_customer
        FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 2) 트랜잭션: cart (고객당 1개 가정)
CREATE TABLE cart (
    cart_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    customer_id BIGINT NOT NULL UNIQUE,
    CONSTRAINT fk_cart_customer
        FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 3) 구성: order_item
CREATE TABLE order_item (
    order_item_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    order_id BIGINT NOT NULL,
    product_id BIGINT NOT NULL,
    qty INT NOT NULL,
    price_at_order INT NOT NULL,
    CONSTRAINT fk_order_item_order
        FOREIGN KEY (order_id) REFERENCES orders(order_id),
    CONSTRAINT fk_order_item_product
        FOREIGN KEY (product_id) REFERENCES product(product_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 3) 구성: cart_item
CREATE TABLE cart_item (
    cart_item_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    cart_id BIGINT NOT NULL,
    product_id BIGINT NOT NULL,
    qty INT NOT NULL,
    CONSTRAINT fk_cart_item_cart
        FOREIGN KEY (cart_id) REFERENCES cart(cart_id),
    CONSTRAINT fk_cart_item_product
        FOREIGN KEY (product_id) REFERENCES product(product_id),
    UNIQUE KEY uq_cart_item (cart_id, product_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 5) 이력: login_log (INSERT-only)
CREATE TABLE login_log (
    login_log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    customer_id BIGINT NOT NULL,
    logged_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_login_log_customer
        FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

-- 6) 스냅샷: order_snapshot (orders 1:1)
CREATE TABLE order_snapshot (
    order_id BIGINT PRIMARY KEY,
    total_amount INT NOT NULL,
    snapshot_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_order_snapshot_order
        FOREIGN KEY (order_id) REFERENCES orders(order_id)
) ENGINE=InnoDB
CHARACTER SET utf8mb4;

2. DML

✅ 1️⃣ 코드 테이블: category (관리자 관리)

INSERT INTO category (name)VALUES
('가방'),
('아우터'),
('신발'),
('상의'),
('하의');


✅ 2️⃣ 마스터: customer

INSERT INTO customer (name, email)VALUES
('홍길동','[email protected]'),
('이순신','[email protected]'),
('강감찬','[email protected]'),
('유관순','[email protected]'),
('김구','[email protected]');


✅ 3️⃣ 마스터: product

INSERT INTO product (category_id, name, price, stock)VALUES
(1,'백팩',50000,10),
(1,'크로스백',70000,5),
(2,'패딩',150000,3),
(3,'운동화',120000,7),
(5,'청바지',60000,8);


✅ 4️⃣ 트랜잭션: cart (고객당 1개)

INSERT INTO cart (customer_id)VALUES
(1),
(2),
(3),
(4),
(5);


✅ 5️⃣ 구성: cart_item

INSERT INTO cart_item (cart_id, product_id, qty)VALUES
(1,1,1),
(1,4,1),
(2,2,2),
(3,3,1),
(4,5,3);


✅ 6️⃣ 트랜잭션: orders