Bảng đơn có nhiều cột hơn so với nhiều bảng có ít cột hơn


8

Điều gì sẽ là một thiết kế cơ sở dữ liệu tốt hơn cho một trang web mạng xã hội? Một bảng có nhiều cột hơn và ít hàng hơn hoặc nhiều bảng có ít cột hơn nhưng nhiều hàng hơn?

Ví dụ: Một người dùng có thể đăng một bản cập nhật trên tường của họ hoặc trong một nhóm.

Hai thiết kế cơ sở dữ liệu tôi có thể nghĩ đến là:

Thiết kế 1

UserPosts

  • Tôi
  • tên người dùng
  • bài đăng
  • ngày giờ

Nhóm người dùng :

  • Tôi
  • Id nhóm
  • tên người dùng
  • bài đăng
  • ngày giờ

Vấn đề tiềm ẩn : Có thể yêu cầu tham gia, có thể (trong tương lai) là một truy vấn chậm.

Thiết kế 2

Bài viết :

  • Tôi
  • tên người dùng
  • Id nhóm
  • bài đăng
  • datetime (trong đó groupid sẽ là null nếu người dùng đăng lên tường của họ)

Vấn đề tiềm ẩn : Vòng lặp trên tập dữ liệu lớn có thể mất một thời gian (dài).


Làm thế nào tôi có thể có hiệu suất tốt hơn khi dữ liệu tăng? Có cách nào khác (tốt hơn) không?


Đối với tôi, vài cột nhiều hàng hơn. Thật dễ dàng để quản lý từng phần một hơn là có một bộ dữ liệu lớn. Nếu mối quan tâm lớn của bạn là dữ liệu lớn trong tương lai, thì không. Máy chủ Sql được thiết kế với loại vấn đề đó, tất cả những gì bạn phải làm là thiết kế nó đúng cách. Có một tập dữ liệu lớn không phải là vấn đề nếu bạn biết cách tối ưu hóa truy vấn của mình
Vincent Dagpin

Sử dụng kế hoạch thực hiện thực sự là một trợ giúp lớn. Nó cho bạn biết vấn đề với truy vấn của bạn là gì. Ps: không thực hiện vòng lặp, nếu có thể sử dụng xử lý hàng loạt, tính năng đó đã có sẵn, hãy sử dụng nó
Vincent Dagpin

Câu trả lời:


2

Xu hướng của tôi ở đây sẽ luôn là lựa chọn thiết kế 1, hoặc ít nhất là dọc theo những đường đó. Đừng quá lo lắng về việc cố gắng loại bỏ nhu cầu tham gia các bảng trong các truy vấn trong tương lai - mọi cơ sở dữ liệu được chuẩn hóa sẽ sử dụng các phép nối trong bất kỳ truy vấn hữu ích nào, đó chỉ là cơ sở dữ liệu quan hệ.

Ngoài ra, tại sao bạn nhất thiết phải tham gia các bảng userPosts và usergroupPosts cho trang web của bạn? Họ sẽ không được hiển thị riêng biệt? Lý do duy nhất bạn sẽ tham gia các bảng này có thể là khi tìm kiếm bài đăng, nhưng không quá khó để viết các truy vấn hiệu quả cho điều đó. Ngoài ra, bạn có thể muốn truy vấn các bảng cho mục đích phân tích, nhưng đó không phải là mục đích chính của cơ sở dữ liệu này.

Thiết kế 2 ít nhất có thể có nghĩa là bạn kết thúc với một bảng rất bận rộn.

Tùy chọn tốt nhất mặc dù sẽ là nguyên mẫu từng và chạy một số thử nghiệm. Xây dựng một nguyên mẫu của từng tùy chọn thiết kế và thực hiện một số điểm chuẩn hiệu suất trên các hoạt động khác nhau với một số dữ liệu giả.


-3

Đối với tôi, theo cấu trúc hiện tại của bạn, Thiết kế 2 là tốt hơn. Bạn có thể thực hiện phân vùng, truy vấn tối ưu & cách có cấu trúc để tạo cơ sở dữ liệu / bảng sẽ giảm thời gian thực hiện. Nhưng một số trường hợp chuẩn hóa hoạt động tốt hơn, nhưng hoàn toàn phụ thuộc vào kiến ​​trúc thiết kế cơ sở dữ liệu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.