thực hành tốt nhất cho thiết kế cơ sở dữ liệu NoQuery


33

Tôi mới bắt đầu sử dụng cơ sở dữ liệu dựa trên tài liệu NoQuery (MongoDB) và tôi tò mò về các thực tiễn tốt nhất để thiết kế cơ sở dữ liệu.

Tôi đoán kiến ​​trúc nên khác với cơ sở dữ liệu quan hệ? Tôi vẫn nên nhắm đến một cơ sở dữ liệu chuẩn hóa?

Ví dụ tôi có một trường hợp sử dụng cụ thể;

Tôi có một người dùng có lịch sử cho thuê (mảng địa chỉ) nên mảng đó là một mảng trên người dùng hay dưới dạng một bộ sưu tập riêng với khóa chung?


Không sử dụng khóa ngoại
dukeofgaming

Đừng sử dụng SQL :-). Nghiêm túc mà nói, "NoQuery" có cho bạn biết gì khác về công nghệ không?

Tôi nghĩ chủ đề này nên có trong trang web Cơ sở dữ liệu của Stack Exchange. Ở đó bạn có thể tìm thêm trợ giúp về vấn đề này.
Luis Arriojas

Câu trả lời:


23

Cách tiếp cận phù hợp cho thiết kế cơ sở dữ liệu NoQuery là DDD ( Thiết kế hướng tên miền ). Đối với một số người đã từng thiết kế RDBMS, NoSql trông giống như các mẫu chống Sql và nó có ý nghĩa hơn khi được xem xét trong phạm vi của DDD.

Tùy thuộc vào việc sử dụng địa chỉ, bạn có thể xác định nó là một đối tượng giá trị bên trong mô hình / thực thể lịch sử cho thuê của bạn.

Dưới đây là một số tài liệu tham khảo có thể xóa những suy nghĩ về thiết kế với NoQuery:


19

TL; DR

Chuẩn hóa trong RDBMS cho phép bạn tận dụng các điểm mạnh của mô hình quan hệ.

Sự không chuẩn hóa trong NoQuery cho phép bạn tận dụng những điểm mạnh của mô hình NoQuery.

Câu trả lời dài

RDBMS rất tuyệt vì chúng cho phép bạn mô hình hóa các thực thể có cấu trúc độc đáo (có thể thay đổi hoặc không) và mối quan hệ của chúng với nhau. Điều này có nghĩa là rất dễ dàng để làm việc ở cấp độ thực thể, cập nhật các thuộc tính của chúng, chèn một cái khác, xóa một cái khác, v.v. RDBMS cung cấp cho bạn các công cụ để hỗ trợ tất cả điều này. Nó sẽ tham gia cho bạn, nó sẽ xử lý các thay đổi nguyên tử giữa các thực thể cho bạn, v.v.

Cơ sở dữ liệu NoQuery rất tuyệt vời vì chúng cho phép bạn mô hình hóa các tập hợp bán / không cấu trúc và các thực thể động. Điều này có nghĩa là rất dễ dàng để mô hình hóa các thực thể luôn thay đổi, các thực thể không chia sẻ cùng thuộc tính và tổng hợp phân cấp.

Để mô hình hóa cho NoSql, bạn cần suy nghĩ về mặt phân cấp và tổng hợp thay vì các thực thể và quan hệ. Vì vậy, bạn không có người, địa chỉ cho thuê và mối quan hệ giữa họ. Bạn có hồ sơ cho thuê tổng hợp cho mỗi người những địa chỉ cho thuê mà họ đã có.

Bạn cần hỏi, tôi sẽ cần dữ liệu gì để thay đổi cùng nhau. Dữ liệu nào được nhóm một cách hợp lý các dữ liệu khác. Trong trường hợp của bạn một người nghe có vẻ như một tổng hợp tốt. Điểm nhập cảnh hợp lý đối với phần còn lại của dữ liệu.

NoQuery cho phép bạn nói, lưu trữ một thứ có những thứ khác có những thứ của riêng họ. Hãy cho tôi toàn bộ thứ bậc của mọi thứ trở lại. Hãy để tôi thay đổi nó khi tôi muốn, bây giờ thay thế toàn bộ hệ thống thứ bậc bằng thứ tôi đã thay đổi. Đó là khá nhiều tất cả những gì nó mang lại cho bạn. Tại sao nó hữu ích? Nếu những gì bạn có là một hệ thống phân cấp của những thứ mà bạn luôn tương tác với toàn bộ. Hoặc nếu bạn cần quy mô lớn.

Mọi thứ khác mà RDBMS cung cấp cho bạn, bạn sẽ phải triển khai thủ công mã và trong lược đồ của mình. Bạn sẽ phải tham gia mã nếu bạn cần tổng hợp tổng hợp. Bạn sẽ phải phân tích cú pháp nếu bạn chỉ cần một phần của tổng hợp. Bạn sẽ cần tự kiểm tra tính độc đáo nếu bạn không muốn những thứ trùng lặp. Bạn sẽ cần thực hiện logic giao dịch của riêng mình khi làm việc trên các tổng hợp, v.v.

Vì vậy, có một bảng lớn với mọi thứ bạn cần là cách để đi trong NoSql. Vì tính nguyên tử chỉ được đảm bảo ở mức đó và hiệu suất cũng vậy. Tìm ra mối quan hệ của bạn sớm là rất quan trọng. Đây là những gì không chuẩn hóa.

Trong RDBMS, việc không chuẩn hóa có hiệu quả làm tê liệt DB của bạn thành một NoQuery. Vì vậy, bình thường bạn muốn ngược lại, đó là bình thường hóa. Nếu bạn không, bạn nên sử dụng NoQuery DB thay thế. Trừ khi bạn cần một chút của cả hai.

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.