2013-07-13 44 views
7

ok, tôi sẽ cố gắng thực hiện điều này một cách thẳng thắn nhất có thể.
bắt đầu từ mySql và suy nghĩ trong bảng, hãy sử dụng ví dụ sau:
Giả sử chúng tôi có trang web bất động sản và chúng tôi hiển thị danh sách các ngôi nhà
bình thường, tôi sử dụng các bảng sau:
* nhà - tài sản bất động sản trong tay
* chủ sở hữu - chủ sở hữu của ngôi nhà - mối quan hệ một-nhiều với nhà ở
* đại lý - cơ quan môi giới bất động sản - mối quan hệ nhiều - nhiều với nhà
* hình ảnh - mối quan hệ nhiều người một với nhà
* đánh giá - mối quan hệ nhiều người một với nhà
MongoDB mới bắt đầu - để bình thường hóa hay không bình thường hóa?

Tôi hiểu rằng MongoDB cung cấp cho bạn sự linh hoạt để thiết kế ứng dụng web của bạn trong các bộ sưu tập khác nhau với id duy nhất giống như một cơ sở dữ liệu quan hệ (chuẩn hóa) và để tận hưởng các lựa chọn nhanh chóng, bạn có thể lồng trong bộ sưu tập, các đối tượng và dữ liệu liên quan (không chuẩn hóa).
quay trở lại danh sách nhà bất động sản của chúng tôi, truy vấn được sử dụng để điền nó khá đắt tiền trong một DB quan hệ bình thường, cho mỗi ngôi nhà bạn cần truy vấn hình ảnh, đánh giá, chủ sở hữu & đại lý, mỗi thực thể nằm trong một bảng khác các trường của nó, bạn có thể sử dụng các phép nối và có nhiều truy vấn tham gia vào một - đắt!
Nhập MongoDB - nơi bạn không cần tham gia, và bạn có thể lưu trữ tất cả các dữ liệu liên quan của một ngôi nhà trong một vật phẩm nhà trên bộ sưu tập nhà, lựa chọn không bao giờ nhanh hơn, đó là một thiên đường db!
Ồ - nhưng điều gì xảy ra khi bạn cần thêm/cập nhật/xóa đánh giá/đại lý/chủ sở hữu/hình ảnh liên quan?
đây là điều bí ẩn đối với tôi, và nếu tôi cần đoán, mỗi bộ sưu tập có liên quan tồn tại trên bộ sưu tập của chính nó trên dữ liệu của nó trong bảng nhà và sau khi một trong những phần dữ liệu liên quan này được thêm/cập nhật/xóa bạn sẽ phải cập nhật nó trên bộ sưu tập của chính nó cũng như trên bộ sưu tập nhà.
Khi cập nhật này - tôi có cần truy vấn các bộ sưu tập khác để đảm bảo rằng tôi đang cập nhật bản ghi nhà với tất cả dữ liệu liên quan được cập nhật không?
Tôi thực sự đoán ở đây ... và đánh giá cao phản hồi của bạn
nhờ
khép hờ

Trả lời

3

Hãy thử phương pháp này:

làm việc ra mà thực thể (hoặc tổ chức) là những anh hùng (s)

Với 'anh hùng', tôi có nghĩa là (các) thực thể mà cơ sở dữ liệu tập trung xung quanh. Hãy lấy ví dụ của bạn. Người anh hùng của ví dụ bất động sản là ngôi nhà *.

làm việc ra các quyền sở hữu

Đi qua các thực thể khác, chẳng hạn như các chủ sở hữu, cơ quan, hình ảnh và đánh giá và tự hỏi liệu nó có ý nghĩa để đặt thông tin của họ cùng với ngôi nhà. Bạn có xóa tầng trên bất kỳ khóa ngoại nào trong cơ sở dữ liệu quan hệ của bạn không? Nếu có, thì điều đó ngụ ý quyền sở hữu.

làm việc ra cho dù đó thực sự quan trọng dữ liệu được de-bình thường

Bạn sẽ có cơ quan (và có lẽ chủ sở hữu) các chi tiết trải rộng trên nhiều ngôi nhà. Điều đó có quan trọng không?

bộ sưu tập nhà của bạn có thể sẽ trông như thế này:

house: { 
owner, 
agency, 
images[], // recommend references to GridFS here 
reviews[] // you probably won't get too many of these for a single house 
} 

* Trên thực tế, nó có thể là quảng cáo của ngôi nhà (vì nhà thường được quảng cáo trên một trang web bất động sản và có lẽ đó là những gì bạn đang thực sự quan tâm đến) vì vậy chỉ cần xem xét rằng

2

Sarah Mei đã viết một bài báo thông tin về các loại vấn đề có thể phát sinh với tính toàn vẹn dữ liệu trong nosql dbs. Sự lựa chọn giữa dữ liệu trùng lặp hoặc sử dụng id, tham gia dựa trên mã và những thách thức với việc giữ toàn vẹn dữ liệu. Mất của cô ấy là bất kỳ db nosql nào với các tham gia dựa trên mã sẽ mất toàn vẹn dữ liệu tại một số điểm. Imho các bình luận bài viết có giá trị như bản thân bài viết trong việc hiểu những vấn đề này và các độ phân giải có thể có.

Link: http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/comment-page-1/

1

Tôi chỉ muốn cung cấp cho một bồi dưỡng bình thường theo quan điểm của MongoDB -

các mục tiêu của bình thường là gì?

  • Giải phóng cơ sở dữ liệu từ biến đổi dị thường - Đối với MongoDB, nó trông giống như nhúng dữ liệu sẽ chủ yếu gây ra điều này. Và trên thực tế, chúng ta nên cố gắng tránh nhúng dữ liệu vào tài liệu ở số MongoDB có thể tạo ra những bất thường này. Đôi khi, chúng tôi có thể cần phải sao chép dữ liệu trong tài liệu vì lý do hiệu suất. Tuy nhiên đó không phải là cách tiếp cận mặc định. Mặc định là để tránh nó.
  • nên giảm thiểu tái thiết kế khi mở rộng-MongoDB là đủ linh hoạt vì nó cho phép bổ sung các phím mà không cần tái thiết kế toàn bộ hồ sơ
  • Tránh thiên vị đối với bất kỳ mô hình truy cập đặc biệt - đây là một cái gì đó, chúng tôi sẽ không phải lo lắng khi mô tả lược đồ trong MongoDB. Và một trong những ý tưởng đằng sau MongoDB là điều chỉnh cơ sở dữ liệu của bạn với các ứng dụng mà chúng tôi đang cố gắng viết và vấn đề mà chúng tôi đang cố gắng giải quyết.