2012-06-29 35 views
6

Câu hỏi này có thể thích hợp hơn với lập trình viên.stackexchange. Nếu có, vui lòng di chuyển.Có bao nhiêu tham gia khả thi trong thực tế

Tôi hiện đang cân nhắc sự phức tạp của các mô hình dữ liệu điển hình. Mọi người đều biết rằng các mô hình dữ liệu nên được chuẩn hóa, tuy nhiên mặt khác, một mô hình dữ liệu chuẩn hóa sẽ yêu cầu một vài tham gia để tập hợp lại dữ liệu sau này. Và tham gia là các hoạt động có khả năng tốn kém, tùy thuộc vào kích thước của các bảng có liên quan. Vì vậy, câu hỏi tôi đang cố gắng tìm ra, là một trong những thường sẽ đi về sự cân bằng này? I E. trong thực tế có bao nhiêu tham gia bạn sẽ tìm thấy chấp nhận được trong các truy vấn điển hình khi thiết kế một mô hình dữ liệu? Điều này đặc biệt thú vị khi đếm nhiều lần tham gia trong các truy vấn đơn lẻ.

Ví dụ: giả sử chúng tôi có người dùng, những người sở hữu nhà ở, trong đó có các phòng, trong đó có ngăn kéo có chứa các vật phẩm. Bình thường hóa điều này với các bảng cho người dùng, nhà ở, phòng, ngăn kéo và vật phẩm theo nghĩa được giải thích ở trên, sau đó yêu cầu tôi tham gia năm bảng, khi nhận tất cả các mục thuộc về một người dùng nhất định. Điều này có vẻ như một sự phức tạp khủng khiếp với tôi.

Rất có thể kích thước của các bảng cũng sẽ được tham gia. Tham gia năm bảng với ít dữ liệu không phải là xấu như ba bảng với hàng triệu hàng. Hay việc xem xét này sai?

+1

5 bảng chỉ là 4 lần tham gia. Không thực sự nhiều. Và bạn sẽ không cần dữ liệu từ tất cả 5 bảng trong tất cả các truy vấn. Nếu bạn có ít bảng hơn (không chuẩn hóa), bạn sẽ có các bảng lớn hơn để xử lý trong tất cả các truy vấn. –

+1

Giống như ypercube nói, 5 bảng không nhiều. (Tôi thường cố gắng giới hạn các bảng tham gia trong một truy vấn để phù hợp trực quan trên màn hình - nó có nghĩa là khoảng 20 bảng hoặc hơn :)) Nhưng nếu trong ứng dụng ví dụ của bạn tải trọng nhất đến từ các truy vấn của người dùng, thì bạn có thể cân nhắc thêm một số dự phòng, thêm id người dùng vào bảng mục - chắc chắn làm cho các truy vấn cụ thể của bạn nhanh hơn nhiều. Tất nhiên bạn phải cẩn thận thiết kế chèn bản ghi của bạn và cập nhật logic để không tạo ra dữ liệu xung đột. Như thường lệ, không có giải pháp "một kích thước phù hợp với tất cả". – Arvo

Trả lời

5

reasons for the Database Normalizations và tôi đã thấy các truy vấn với hơn 20 bảng và truy vấn phụ được kết hợp với nhau, hoạt động tốt trong một thời gian dài. Tôi thấy khái niệm bình thường hóa là một chiến thắng khổng lồ, vì nó cho phép tôi giới thiệu các tính năng mới được thêm vào các ứng dụng đang hoạt động mà không ảnh hưởng đến các bộ phận hoạt động xa.

Cơ sở dữ liệu đi kèm với các tính năng khác nhau để làm cho cuộc sống của bạn dễ dàng hơn:

  • bạn có thể tạo các khung nhìn cho các truy vấn thông dụng nhất (mặc dù đây không phải là trường hợp sử dụng chỉ cho xem);
  • một số RDBMS cung cấp Common Table Expressions (CTE), cho phép bạn sử dụng truy vấn con được đặt tên và truy vấn đệ quy;
  • một số RDBMS cung cấp các ngôn ngữ mở rộng (như PL/SQL hoặc PL/pgSQL), cho phép bạn phát triển các chức năng của riêng mình để ẩn sự phức tạp của lược đồ và chỉ sử dụng các cuộc gọi API để vận hành dữ liệu của bạn.

Một lúc trở lại có câu hỏi nào đó liên quan đến số How does a SQL statement containing mutiple joins work? Cũng có thể đáng để xem xét nó.

Phát triển một ứng dụng với cơ sở dữ liệu chuẩn hóa dễ dàng hơn, 'cos với cách tiếp cận thích hợp, bạn có thể cô lập lược đồ của bạn thông qua chế độ xem/chức năng và làm cho mã ứng dụng của bạn miễn nhiễm với các thay đổi lược đồ. Nếu bạn đi cho thiết kế không chuẩn hóa, nó có thể xảy ra rằng thay đổi thiết kế sẽ ảnh hưởng rất nhiều đến mã của bạn, vì các hệ thống không chuẩn hóa có xu hướng được tối ưu hóa hiệu năng cao với chi phí thay đổi.

3

Mô hình dữ liệu được chuẩn hóa hoàn toàn có chi phí hoạt động cao hơn nhưng có khả năng thay đổi cao hơn. Một mô hình dữ liệu phẳng như một xu được điều chỉnh cho một truy vấn sẽ hoạt động tốt hơn nhiều nhưng bạn sẽ phải trả giá khi các thông số kỹ thuật thay đổi.

Vì vậy, có thể câu hỏi là việc sử dụng mô hình dữ liệu (truy vấn) của bạn có thay đổi rất nhiều không? Nếu không; không bình thường hóa chúng chỉ điều chỉnh chúng cho các truy vấn cụ thể (hỏi DBA của bạn). Nếu không bình thường hóa và chỉ bằng kế hoạch thực hiện truy vấn nếu bạn sử dụng nhiều lần tham gia, tôi không thể cung cấp cho bạn một số cụ thể.

5

Cơ sở dữ liệu chuẩn hóa là một hình thức nghệ thuật.
Nếu bạn cấu trúc tham gia của bạn một cách chính xác, bạn sẽ chỉ lấy các cột cần thiết. Cần phải nhanh hơn nhiều để chạy một truy vấn với hàng triệu bản ghi với nhiều bảng và chỉ cần tham gia các trường cần thiết sau đó nó sẽ nếu bạn có nói một hoặc hai bảng với tất cả các bản ghi. Trong ví dụ thứ hai, bạn lấy tất cả dữ liệu và phân loại thông qua đó sẽ là một cơn ác mộng mã hóa.
MySQL rất tốt chỉ truy xuất dữ liệu được yêu cầu.
Chỉ vì truy vấn dài không có nghĩa là truy vấn chậm hơn.
Tôi đã thấy các câu lệnh truy vấn tốt hơn 20 dòng mã rất nhanh.

Có niềm tin vào truy vấn bạn viết và nếu bạn không viết kịch bản thử, hãy tự mình thử nghiệm.

+2

Ồ vâng và trả lời câu hỏi khác của bạn. Bạn có thể chấp nhận bao nhiêu lần tham gia? Câu trả lời sẽ là nhiều như nó mất. :) –

1

Để giải quyết câu hỏi của bạn câu trả lời là ở:

http://en.wikipedia.org/wiki/Database_normalization

Nếu hiệu suất trở thành một vấn đề sử dụng denormalization những vấn đề có thể được giải quyết. Suy nghĩ về bước trước đó (trừ khi bạn đã có một tải trọng mong đợi) không nên được thực hiện. Không chuẩn hóa khi nó thực sự cần thiết và dựa trên các phép đo.

Các vấn đề liên quan