---
# System prepended metadata

title: Thiết kế database

---

Thiết kế database
===


## Bạn đã tự tin về khả năng thiết kế database chưa?
1/ Phân biệt rõ ràng các loại quan hệ
- 1:1: A có 1 B, B chỉ có 1 A
> 1 người có 1 số CMND
> 1 số CMND chỉ thuộc về 1 người
> Quan hệ Người:CMND và quan hệ 1:1
> Quan hệ 1:1 thường được biểu diểu bằng cách thêm thuộc tính vào bảng

- 1:N: A có nhiều B, mỗi B chỉ thuộc về 1 A
> 1 Lớp có nhiều học sinh
> 1 Học sinh chỉ thuộc 1 lớp
> Thêm khóa ngoại: Hocsinh.lop_id = Lop.id 

- N:N: A có nhiều B, B có thể có nhiều A
> 1 Sinh viên học nhiều khóa học
> 1 khóa được nhiều sinh viên học
> Thêm bảng: course_student (id: A_I, course_id, student_id)


2/ Thuộc tính là gì?
- 1 đối tượng có nhiều thuộc tính

3/ Entity là gì? Attribute là gì?
- Entity là thực thể (Lớp đối tượng): Có thể là 1 table
- Attribute là thuộc tính: Có thể là field trong table


![](https://i.imgur.com/n8YR2E7.png)


https://dbdiagram.io/d/5ec7e92e39d18f5553ff9e03


## Next steps:
- Hiện thực database: 
    - Tạo database, bằng PM Quản trị hoặc code init schemas
    - Mapping Database thành Model trong code (Mô hình MVC)
- Viết API để client gọi
    - Chuẩn Restful: <Thêm Link>
    - Đủ các thao tác CRUD: (Create, Read (Listing & Detail), Update, Delete)
- Code client (Đề tài)

## Đề tài
> Bạn học được gì từ đề tài này

#### 1.Init dự án
- Theo cấu trúc thư mục có sẵn hoặc tự thiết kế
- Cấu hình bundler (webpack)
- Cấu hình biến môi trường
#### 2. Code
- Chọn module cần thiết kế
- Chia nhỏ component 
    - Chia đủ nhỏ / đừng quá nhỏ
    - 1 đoạn code lặp đi lặp lại => Biến thành component
    - Xác định rõ: Dumb và Smart Component
> Nghệ thuật khi code SPA là ở chỗ chia component
#### 3. Một vấn đề thực tế mình gặp, tổ chức dữ liệu
- Vuex
- Service là gì?
- Mock là gì? Mock Object/Mock Service/Mock API
- Phân quyền / Routing
- VD về làm việc với dữ liệu: Filter/Map/Transform dữ liệu

#### 4. Kinh nghiệm code ít bug:
- DRY
- YANGI
- Clean Code


## BTVN: Review xem
- HTML đã OK chưa?
- Viết rõ ràng chưa?
- CSS nằm ở đâu?

#### Chia ra review / Viết lại thành component
> 1 file chứa HTML + CSS (Chưa cần JS / Thuộc tính)
- [ ] Home / Menu / Nav: Nam
- [ ] Product Detail: An
- [ ] Category: Thiên
- [ ] Product Loop: Cường
