0
0
Lập trình
Admin Team
Admin Teamtechmely

Thiết kế cơ sở dữ liệu: Hướng dẫn mô hình hóa hiệu quả

Đăng vào 1 tuần trước

• 7 phút đọc

Chủ đề:

#database

Giới thiệu

Chào các bạn! Hy vọng mọi người đều khỏe mạnh. Khi tôi trở thành một developer full-stack, tôi đã tìm kiếm cách để nâng cao kỹ năng của mình, đặc biệt là trong phần back-end. Trong thời gian học đại học, tôi đã nghiên cứu về mô hình hóa dữ liệucơ sở dữ liệu. Tuy nhiên, do công việc ban đầu của tôi chủ yếu tập trung vào front-end, tôi đã bỏ quên những kiến thức đó.

Khi bắt đầu các dự án cá nhân hoặc các case study, tôi thường gặp khó khăn trong việc mô hình hóa cơ sở dữ liệu. Nhiều lần, tôi đã mô hình hóa không đúng và điều này đã ảnh hưởng đến quy trình lập trình của tôi. Để giải quyết vấn đề này, tôi đã quyết định học lại về các nguyên tắc cơ bản của mô hình hóa dữ liệu. Dưới đây là những điểm quan trọng mà tôi đã rút ra từ quá trình học tập của mình:

1. Mô hình hóa độc lập với cơ sở dữ liệu

Trong giai đoạn đầu của mô hình hóa, không nên nhắm đến việc sử dụng một công nghệ cụ thể nào cho cơ sở dữ liệu, chẳng hạn như: MySQL, PostgreSQL, Oracle, MongoDB, v.v. Nếu bạn bắt đầu với suy nghĩ này, bạn sẽ bị ảnh hưởng bởi công nghệ đã chọn và điều này sẽ tạo ra một mối liên hệ phụ thuộc giữa mô hình và cơ sở dữ liệu. Nếu trong tương lai bạn cần thay đổi cơ sở dữ liệu vì lý do nào đó, toàn bộ mô hình sẽ bị ảnh hưởng và cần phải được làm lại.

Trước khi bắt đầu quá trình mô hình hóa, cần phải thu thập yêu cầu liên quan đến dự án. Những yêu cầu này sẽ là hướng dẫn cho việc xác định các thực thể và mối quan hệ của chúng.

2. Các loại mô hình hóa

2.1 Mô hình khái niệm

Đây là giai đoạn chúng ta định nghĩa các thực thể và cách chúng liên hệ với nhau (1:1, 1:N, N:N). Mục tiêu là nắm bắt các yêu cầu và khái niệm của doanh nghiệp theo cách dễ hiểu, không quá kỹ thuật, để tất cả các bên liên quan đều có thể hiểu.

Mẹo: Nếu không phải là một dự án cho một công ty lớn hoặc chỉ có ít người không chuyên tham gia, bạn có thể bỏ qua giai đoạn này và bắt đầu trực tiếp với Mô hình Logic để tiết kiệm thời gian.

2.2 Mô hình logic

Giai đoạn này, chúng ta xác định các thuộc tính (dữ liệu) của các thực thể, bao gồm cả các khóa chính và khóa ngoại. Mô hình logic chuyển đổi mô hình khái niệm thành một cấu trúc chi tiết và cụ thể hơn.

Mục tiêu là tạo ra một mô hình kỹ thuật để hướng dẫn phát triển cơ sở dữ liệu, nhưng vẫn đủ trừu tượng để độc lập với công nghệ.

Dưới đây là một số công cụ hữu ích cho việc mô hình hóa:

2.3 Mô hình vật lý

Đây là giai đoạn cuối cùng, nơi chúng ta áp dụng các đặc điểm của cơ sở dữ liệu vào mô hình logic đã định trước, tức là giai đoạn triển khai công nghệ liên quan đến cơ sở dữ liệu. Tại đây, chúng ta xác định các loại dữ liệu và cách chúng sẽ được tổ chức.

Mục tiêu là tối ưu hóa mô hình cho công nghệ đã chọn, đảm bảo hiệu suất của cơ sở dữ liệu. Trong giai đoạn này, chúng ta sẽ phân tích loại cơ sở dữ liệu nào sẽ phù hợp nhất cho dự án, cho dù là SQL hay NoSQL.

Tóm tắt:

  • Mô hình khái niệm là nơi chúng ta định nghĩa các thực thể và cách chúng liên quan (1:1, 1:N, N:N);
  • Mô hình logic là nơi chúng ta xác định các thuộc tính (dữ liệu) của các thực thể, bao gồm cả các khóa chính và khóa ngoại;
  • Mô hình vật lý là giai đoạn cuối cùng, nơi chúng ta áp dụng các đặc điểm của cơ sở dữ liệu vào mô hình logic đã định trước;

Mô hình khái niệm xác định các yêu cầu của doanh nghiệp, mô hình logic chuyển đổi những yêu cầu này thành một cấu trúc dữ liệu dễ hiểu và mô hình vật lý hoàn tất việc triển khai chi tiết trong môi trường cơ sở dữ liệu cụ thể.

3. Một số thách thức trong quá trình mô hình hóa

3.1 Thay đổi yêu cầu

Thay đổi yêu cầu là điều không thể tránh khỏi trong bất kỳ môi trường kinh doanh nào. Khi nhu cầu của người dùng thay đổi hoặc yêu cầu mới xuất hiện, các mô hình dữ liệu phải được điều chỉnh để phản ánh những thay đổi này. Điều này có thể dẫn đến những thách thức bổ sung, chẳng hạn như duy trì tính nhất quán giữa các phiên bản khác nhau của mô hình và đảm bảo rằng những thay đổi không làm ảnh hưởng đến tính toàn vẹn của dữ liệu hiện có.

Để giải quyết vấn đề này, các kỹ thuật từ DDD (Domain Driven Design) có thể giúp chúng ta hiểu rõ hơn về những thay đổi trong dự án. DDD giúp chúng ta nắm bắt các quy tắc kinh doanh. Các yêu cầu, quy tắc và miền kinh doanh là những lĩnh vực có liên quan và đi cùng nhau trong suốt vòng đời của dự án. Để thu thập yêu cầu tốt và điều chỉnh nó trong suốt dự án, hãy tìm hiểu thêm về miền kinh doanh, ai là chuyên gia trong miền và cách xử lý ngôn ngữ phổ quát.

3.2 Khả năng mở rộng của cơ sở dữ liệu

Khả năng mở rộng là một yếu tố quan trọng khác trong mô hình hóa dữ liệu, đặc biệt trong các hệ thống xử lý khối lượng dữ liệu lớn hoặc cần hỗ trợ số lượng người dùng ngày càng tăng. Các mô hình dữ liệu không thể mở rộng có thể dẫn đến các vấn đề về hiệu suất, thời gian phản hồi chậm và khó khăn trong việc bảo trì hệ thống.

Trong giai đoạn mô hình vật lý, chúng ta cần xem xét các Access Patterns (Padrões de Acesso) để xác định các chỉ mục trong cơ sở dữ liệu của chúng ta. Sau khi phân tích tần suất của các truy vấn, chúng ta có thể xác định một số mẫu truy cập, chẳng hạn như:

  • Liệt kê tất cả người dùng;
  • Tìm kiếm người dùng theo email;
  • Liệt kê các đơn hàng của một người dùng;

Thông qua những mẫu đã xác định, chúng ta có thể thực hiện các chỉ mục trên những thông tin được truy vấn nhiều lần trong cơ sở dữ liệu của mình.

Các chỉ mục là cấu trúc phụ trợ giúp tăng tốc độ truy xuất dữ liệu trong các bảng. Chúng ta có thể so sánh với một cuốn sách. Các chỉ mục giống như thông tin có trong mục lục, chỉ ra vị trí của thông tin cụ thể, thay vì yêu cầu cơ sở dữ liệu quét từng dòng của bảng để tìm kiếm thông tin đó. Nhờ vậy, hiệu suất của truy vấn được tối ưu hóa, giảm thời gian phản hồi và giảm tải cho máy chủ.

4. Những bài học chính

  • Việc thu thập yêu cầu phải được thực hiện trước khi mô hình hóa cơ sở dữ liệu. Để hiểu rõ hơn về các yêu cầu và quy tắc kinh doanh của dự án, các kỹ thuật DDD là rất hữu ích;
  • Mô hình hóa nên được thực hiện độc lập với cơ sở dữ liệu. Có 3 loại mô hình hóa: khái niệm, logic và vật lý;
  • Chỉ trong mô hình vật lý chúng ta mới nên quan tâm đến cơ sở dữ liệu, cho dù đó là kiểu SQL hay NoSQL, MySQL, PostgreSQL, Oracle, MongoDB hoặc bất kỳ loại nào khác;
  • Phân tích các Access Patterns và thực hiện các chỉ mục trong giai đoạn mô hình vật lý có thể giúp cải thiện khả năng mở rộng của cơ sở dữ liệu khi dự án phát triển;

Đây chỉ là một phần trong những gì tôi đã học!

Nếu có chuyên gia nào đó thấy tôi đã mô hình hóa sai cách, xin hãy đừng đặt cược chống lại tôi - chỉ cần chuyển sang vòng tiếp theo.

Tất cả những suy nghĩ này được rút ra từ những tài liệu tôi đã tham khảo:

  • Khóa học Thiết kế Cơ sở Dữ liệu: mô hình hóa cơ sở dữ liệu đúng cách – JSTack
  • Mô hình hóa dữ liệu là gì và nó phục vụ cho mục đích gì? – Blog Alura

Hẹn gặp lại trên Github, chúc mọi người thành công! 🚀

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào