Những câu hỏi này là cơ sở dữ liệu vô cùng quan hệ cụ thể.
Trong CouchDB hoặc bất kỳ RDBMS nào khác, bạn sẽ không lưu trữ dữ liệu giống như cách bạn làm trong RDBMS để thiết kế mối quan hệ theo cách này có thể không tốt nhất. Tuy nhiên, chỉ để cung cấp cho bạn ý tưởng về cách bạn có thể thực hiện việc này, hãy giả sử bạn có tài liệu cho nhà cung cấp và một loạt tài liệu cho các đơn đặt hàng cần "liên kết" trở lại tài liệu của nhà cung cấp.
Không có khóa chính, tài liệu nào có _id là uuid. Nếu bạn có một tài liệu cho một nhà cung cấp, và bạn đang tạo một tài liệu mới cho một thứ gì đó giống như một đơn đặt hàng, bạn có thể tham khảo các tài liệu của nhà cung cấp _id.
{"type":"order","vendor-id":"asd7d7f6ds76f7d7s"}
Để tra cứu tất cả các đơn đặt hàng cho một nhà cung cấp cụ thể bạn sẽ có một cái gì đó xem bản đồ như:
function(doc) { if (doc.type == 'order') {emit(doc['vendor-id'], doc)}}
Các _id tài liệu sẽ không thay đổi, do đó, "toàn vẹn" ở đó, ngay cả khi bạn thay đổi các thuộc tính khác trên tài liệu của nhà cung cấp như tên hoặc thông tin thanh toán của họ. Nếu bạn gắn tên nhà cung cấp hoặc các thuộc tính khác từ tài liệu của nhà cung cấp trực tiếp vào tài liệu đơn đặt hàng, bạn sẽ cần phải viết một tập lệnh nếu bạn muốn thay đổi chúng hàng loạt.
Hy vọng rằng sẽ giúp ích một chút.
toàn vẹn tham chiếu là do-it-mình, nói cách khác. Lập trình viên phải nhớ tạo tài liệu nhà cung cấp trước, sau đó viết các mục tham chiếu đến ** _ id ** của nó, vì CouchDB không thể thực thi điều đó cho chúng. Tương tự, lập trình viên khi xóa phải nhớ bản thân trước hết phải xóa các đơn đặt hàng liên quan đến nhà cung cấp trước khi xóa nhà cung cấp - CouchDB sẽ không làm điều đó cho họ. Vì vậy, CouchDB sẽ cho phép bạn liên tục bước vào trạng thái không phù hợp; không có hỗ trợ để bảo vệ chống lại nó. –
Tôi sẽ không gọi một tài liệu lúng túng mà không có tham chiếu đến nó là "trạng thái không nhất quán" vì tiểu bang trong trường hợp này là tài liệu tham khảo từ tài liệu khác sẽ bị xóa. Nhưng đặc điểm của bạn về ngữ nghĩa ở đây là chính xác. Tham chiếu chỉ là các chỉ mục và loại bỏ một tài liệu không suy ra một số giao dịch lớn hơn sẽ làm sạch tham chiếu ngược lại, mặc dù nó sẽ dọn sạch tham chiếu tới. – mikeal
Quan trọng hơn, một máy chủ couchdb là REST-3 có khả năng (và bạn có thể xây dựng khả năng REST-4 nếu bạn muốn với các tài liệu thiết kế). Áp dụng thuật ngữ "tính toàn vẹn tham chiếu" sẽ không có ý nghĩa gì đối với cơ sở dữ liệu tài liệu hơn là cho một trò chơi video. Nó không phải là một cơ sở dữ liệu quan hệ và không giả vờ là. –