1. 테이블
- 행 (Row) = 데이터하나
- 열 (Column) = 속성
2. 관계 (외래키)
- 테이블과 테이블을 연결하는 것.
- 외래키는 다른 테이블의 id를 저장함.
- 1:N -> 한명이 여러개
- ex. 판매자 <> 상품 (1명의 판매자는 여러개의 상품을 가질수있다.)
- N:M -> 중간 테이블 필요
- ex. 사용자 <> 찜한 상품 (한 명의 사용자는 여러 상품을 찜할 수 있고, 하나의 상품은 여러 사용자에게 찜 될수 있다.)
- 중간테이블 (쪼인 테이블) 필요.
-- users 테이블
| id | name |
|----|------|
| 1 | Hope |
| 2 | Kim |
-- products 테이블
| id | title |
|----|--------|
| 1 | 아이폰 |
| 2 | 맥북 |
| 3 | 의자 |
-- likes 테이블 (중간 테이블)
| id | user_id | product_id | created_at |
|----|---------|------------|------------|
| 1 | 1 | 1 | 2024-01-01 | ← Hope가 아이폰 찜
| 2 | 1 | 2 | 2024-01-02 | ← Hope가 맥북 찜
| 3 | 2 | 1 | 2024-01-03 | ← Kim이 아이폰 찜
| 4 | 2 | 3 | 2024-01-04 | ← Kim이 의자 찜
- 1:1 관계
- ex. 사용자 <> 프로필 상세
- 근데, 1:1 보다는 그냥 유저 컬럼에 추가하는게 맞음.
- 진짜 데이터가 많거나, 선택적일 때에만.
3. ORM (ex. JPA) = SQL 자동 생성
- 코드에서 sql 직접 쓸필요 없이 코틀린 코드만 쓰면됨.
4. 트랜잭션 = All or Nothing
5. 인덱스 = 검색속도 향상