thảo luận Xin kinh nghiệm thiết kế database

fedex2791992

Junior Member
Từ trước đến giờ thiết kế db đối với mình là một cái gì đó rất khó nhằn 🤒, mình đăng post này muốn xin kinh no của ae đi trước đã có kinh no nhiều về thiết kế db, muốn hỏi về:
+ Cách tư duy để tạo thành đối tượng trong db
Vd: Từ chức năng user đặt bàn thì sẽ có 2 bảng là user và booking, quan hệ vs nhau là 1:n.
Cảm ơn các fen đã đọc post của mình.
 
Cho đề đi fen, tập phân tích thành đối tượng rồi từ đối tượng và các quan hệ giữa chúng để map thành các bảng trong database. Thiết kế đại một cái rồi đưa lên hỏi han tranh cãi để có thêm góc nhìn rồi cải thiện thiết kế của thím.
Thực hành nhiều thì quen thôi.
 
Theo mình thì với bài toán cơ bản và đơn giản dùng CSDLQH, thím chọn 1 "đối tượng" làm chủ thể chính của bài toán. Sau đó xây dựng các "đối tượng" khác xoay quanh.
VD: Chọn booking là chủ thể chính có các thông tin dạng ngày giờ,... Các "đối tượng" xoay quanh là người đặt, món ăn, số bàn,...
Nếu thím là người code luôn thì nên suy nghĩ cơ bản qua về cách mà mình sẽ truy vấn, trong lúc tạo cấu trúc database. Đôi khi cũng ko cần phải tuân thủ các chuẩn NF, mà ưu tiên cho việc tiện query báo cáo.
 
Ngày trước mình học thì có 3 cuốn này:
  • Beginning database design from novice to professional: Cuốn này khá mỏng, nên bắt đầu từ đây.
  • Database Design for Mere Mortals (hình như có bản 4th rồi đó): Cuốn này mình thấy khá đầy đủ về cả khái niệm lẫn example. Không quá khó hiểu.
  • Relational Database Design and Implementation: Cuốn này thì example khó hiểu hơn chút.

Theo mình thì bạn nên bắt đầu với relational database trước. Mấy cuốn này mình thấy khá cơ bản và là nền tảng. Còn việc design model cho từng DBMS (SQL Server, Oracle, Postgres ...) thì nên học sau.
N(ot)o(nly)SQL nên để sau cùng, khi bạn đã thành thạo và quen thuộc với các hệ thống RDBMS.


Việc design database model thường xuất phát từ business logic nên ngoài việc hiểu các kiến thức, khái niệm technical bạn cũng phải hiểu business logic. Có hiểu được business logic thì mới design tốt được.
Ví dụ design một data mart cho Sale, Order ... có thể sẽ khác nhau giữa các business khác nhau.

Edit 2: Chỗ này bạn nên học cách sử dụng các report tool, học cách tạo các biểu đồ, report. Khi đó sẽ hiểu sâu hơn về dữ liệu của bạn, biết được cái gì có, cái gì thiếu, cái gì quan trọng, cái gì không quan trọng. Từ đó mới biết được nên chỉnh sửa data model của mình thế nào cho phù hợp.


Edit 1: Sau 1, 2 năm; để lên trình nữa thì cố gặm hết hai cuốn kinh điển này về Data Warehouse nữa nhé :beat_brick:
  • Building the Data warehouse - Bill Immon
  • The Data Warehouse Toolkit - Ralph Kimball
 
Last edited:
N(ot)o(nly)SQL nên để sau cùng, khi bạn đã thành thạo và quen thuộc với các hệ thống RDBMS

Thật ra bắt đầu sớm với NoSQL, khi đã có kiến thức nền về RDBMS, là hoàn toàn được.
Nó bổ sung thêm khái niệm khi thiết kế DB, biết sớm chút cũng tốt, có thời gian ngấm :)

Fun fact: NoSQL lúc đầu nó là NoSQL luôn đó, do tụi marketing chả biết mịa gì, nghĩ bỏ đc table thì đếch liên quan gì tới releational nữa nên chém bậy.
Sau bị chỉnh nhiều quá thì chống chế thành NotOnly :lol:
 
Để bắt đầu thiết kế DB bạn phải viết ra được quan hệ ở ngôn ngữ tự nhiên
Ví dụ:
- 1 user có thể đặt nhiều bàn, một bàn có thể đặt bởi 0,1 user
Từ các mô tả này suy ra quan hệ để vẽ biểu đồ ER (Entity Relation Diagram)
Thiết kế xong thì chuẩn hóa về dạng 3NF (nếu cần)
Làm nhiều thì quen thôi
zFNuZTA.png
 
Chào các thím.

Em có đọc và theo dõi qua một số topic trên này. Nhưng chưa thấy có topic nào chia sẻ về kinh nghiệm trong việc thiết kế cơ sở dữ liệu cả ( hoặc có thể có rồi mà em chưa tìm thấy )

Các bác có thể chia sẻ kinh nghiệm về việc triển khai từ yêu cầu ra tới thiết kế được cơ sở dữ liệu. Làm sao để có thể có độ mở rộng tốt, hoặc một số tip trick trong quá trình thiết kế database được không ạ.

Như kinh nghiệm của em thì việc thiết kế database của em chỉ dừng ở các dự án nhỏ, khoảng 20 tới 30 bảng là cùng, nên kinh nghiệm để chia sẻ cũng không có nhiều lắm.

Nói chung cũng chỉ dừng lại ở mức đọc yêu cầu => thiết kế database theo ý hiểu. Chia nhỏ hết mức có thể các bảng. Thiết kế các khóa liên kết và thỉnh thoảng có xem qua mấy cái về chuẩn 3NF trong thiết kế database.

Nhưng để thực sự thiết kế DB đáp ứng được yêu cầu về độ mở rộng và tính tối ưu, đỡ phải đập đi làm lại thì chưa có nhiều kinh nghiệm. Mong các thím có kinh nghiệm chia sẻ cùng nhau :D
 
Cho mình ké tí, mình gặp vấn đề thiết kế database nhân sự, phòng ban thì nhiều, rồi nhiều cấp, tách, nhập, đổi tên liên tục. Bạn nào có tài liệu về vấn đề này không, cho mình keyword với

Sent from Samsung SM-A920F using vozFApp
 
Back
Top