- vừa được xem lúc

SQL Antipatterns - Phần 1 - Thiết kế cơ sở liệu làm sao để tốt hơn

0 0 5

Người đăng: codeforfun

Theo Viblo Asia

THIẾT KẾ CƠ SỞ DỮ LIỆU

Về việc thiết kế cơ sở dữ liệu cần lưu ý các vấn đề sau

1. Tránh lưu trữ giá trị dạng đa giá trị

Không sử dụng các trường lưu trữ dạng 1 cột nhiều giá trị

VD: bảng USER không nên tạo 1 trường PHONG_BAN_IDS chứa giá trị dạng ID1, ID2 … kiểu 1,2,3

2. Tránh lưu trữ bảng dạng đệ quy phụ thuộc

Không sử dụng kiểu trong 1 bảng, khóa ngoại lại trỏ vào khóa chính của bảng đó

Ví dụ: Bảng Category thường sẽ là CategoryID, ParentCategoryID, Name

Bạn có thể tạo ra 1 bảng

Bảng Category (CategoryID, Name)

Và bảng Category_Xref (CategoryID, ParentCategoryID) làm bảng quan hệ cha-con

3. Khóa chính luôn tồn tại trong bảng

Bất kỳ bảng nào cũng nên có khóa chính

Mục tiêu là khi truy cập vào 1 bản ghi trong bảng rất dễ dàng theo khóa chính để thao tác như cập nhật, xóa.

Kiểm tra trùng lặp bản ghi (dựa vào khóa chính đã có)

Không đặt tên khóa chính tên dạng chung chung như (ID)

Thay vì đặt tên khóa chính cho một bảng tên là Id thì chúng ta nên đặt tên có ý nghĩa hơn như: CategoryID, UserID, DepartmentID

Mục đích là khi tạo các mối quan hệ giữa các bảng thì bạn có thể nhìn thấy luôn khóa ngoại là của bảng nào, tương ứng với khóa chính ở bảng nào

VD: Không nên: Category (ID, Name, Note)

Nên: Category (CategoryID, CategoryName, Note), Product (ProductID, ProductName, CategoryID)

4. Xem xét thêm khóa ngoại cho bảng nếu cần thiết

Một số trường hợp bỏ khóa ngoại thì có vẻ sẽ giúp cho DB nhẹ hơn, linh hoạt hơn, tuy nhiên đánh đổi lại là chúng ta phải tự quản lý tính toàn vẹn dữ liệu. Đôi khi cái giá phải trả là rất đắt.

Thêm khóa ngoại sẽ giúp việc ràng buộc dữ liệu chặt chẽ, nên thêm đối với những chức năng cần tính ràng buộc dữ liệu chặt chẽ.

5. Không tạo nhiều cột để lưu các giá trị khác nhau của một thuộc tính

Ví dụ: Không nên: USER (UserID, Active, InActive)

Nên USER (UserID, STATUS_ID), USER_STATUS (STATUS_ID, STATUS_NAME) với giá trị STATUS_ID là 1: Active, 2: InActive

6. Chia nhỏ dữ liệu của một bảng hoặc theo năm

Có thể đánh partition theo năm cho bảng dữ liệu

Tham khảo bài gốc: SQL ANTIPATTERNS: PHẦN 1 - TỐI ƯU HÓA THIẾT KẾ CƠ SỞ DỮ LIỆU

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lợi ích templates .gitignore trong dự án

Mở đầu. Gitignore là một file trong các dự án Git, nó chứa danh sách các tệp và thư mục mà bạn muốn Git bỏ qua (không theo dõi) khi bạn thực hiện các thao tác như git add hoặc git commit.

0 0 14

- vừa được xem lúc

Deploy ELK Stack với Docker

Hello các bạn lại là mình đây Chúc các bạn có kì nghỉ 30/4-1/5 vui vẻ và an toàn . Tiếp tục series học Docker và CICD của mình, hôm nay ta sẽ cùng nhau làm một bài "tàu nhanh" setup ELK Stack bao gồm

0 0 13

- vừa được xem lúc

Transaction trong Rails: Đảm bảo tính toàn vẹn và nhất quán dữ liệu

1. Lời mở đầu.

0 0 14

- vừa được xem lúc

Giới thiệu về Zabbix

1. Lời mở đầu.

0 0 12

- vừa được xem lúc

Ronin Engineer Tích Hợp với VNPay Như Thế Nào?

Hello mọi người, mình là một Ronin Engineer. Hôm nay mình sẽ trình bày website roninhub.com bên mình tích hợp với VNPay như nào thế. 1.

0 0 11

- vừa được xem lúc

Phần 1: Khám phá golang - Bước đầu tiên

Giới thiệu. Sự ra đời.

0 0 10