2017-10-04 18 views
7

Chỉ cần một câu hỏi nhanh về thiết kế một schema FireStore:schema với thiết kế của Cloud FireStore nhiều-nhiều và chéo các mối quan hệ thực thể

Tôi biết bạn Gotta Sử dụng đúng công cụ cho công việc, và FireStore là không được phép là một cơ sở dữ liệu quan hệ, nhưng liệu có các kỹ thuật gợi ý để mô hình hóa nhiều mối quan hệ?

Ex:

Tôi muốn xây dựng một ứng dụng quản lý tài sản nơi

công ty sở hữu Properties, có chứa đơn vị. Hệ thống phân cấp đơn giản ở đây.

Vì vậy, Người thuê sẽ thuê nhiều Đơn vị theo thời gian và mỗi Đơn vị sẽ có nhiều người thuê theo thời gian .. tất cả được đóng gói bằng Hợp đồng thuê 1 Đơn vị cho 1 hoặc nhiều Khách thuê.

Các đơn vị có thể sở hữu Thuê tôi đoán, nhưng làm cách nào Người thuê xem tất cả các Hợp đồng thuê của họ theo thời gian .. Nên thuê có bộ sưu tập phụ tham chiếu Người thuê nhà .. Người thuê có cao nhất không?

Chỉ cần tìm một số đề xuất cơ bản ..

Hoặc tốt hơn là chỉ sử dụng GraphQL với cơ sở dữ liệu quan hệ?

Trả lời

9

Không có bữa trưa miễn phí nào ở đây.

Các đơn vị có thể sở hữu hợp đồng thuê nhưng hiện đang ngăn các truy vấn đơn vị chéo như đơn vị thuê mà đơn vị thuê đã thuê. Chúng tôi chưa hỗ trợ collection group queries nhưng khi chúng tôi thực hiện việc này sẽ là khả thi.

Để giải quyết vấn đề này ngay hôm nay, hãy cho thuê bộ sưu tập ánh xạ 1 đến 1 cấp cao nhất giữa các trường unittenant thì lịch sử thuê của bạn sẽ là db.collection('leases').where('tenant', '==', 'cdock'). Bạn có thể lưu trữ đủ thông tin về các đơn vị trong hợp đồng thuê mà bạn có thể tránh tham gia từ thuê cho các đơn vị và đủ thông tin về người thuê nhà để tránh tham gia ở đó.

Nếu số lượng người thuê nhà mỗi thuê là nhỏ, bạn cũng có thể làm thuê 1 đơn vị đối với nhiều người thuê nhà với một người thuê thiết lập như sau:

'tenants': { 
    'cdock': true, 
    'alice': true, 
    'bob': true 
} 

Sau đó, bạn có thể truy vấn lịch sử của bạn với db.collection('leases').where('tenants.cdock', '==', true).

Người thuê nhà có thể là cấp cao nhất (và tham gia) hoặc không phụ thuộc vào số lượng thông tin bạn cần lưu giữ và liệu hợp đồng thuê có cần thông tin cập nhật về người thuê hay không.

+0

Vì vậy, ở đây bạn về cơ bản có một đối tượng 'người thuê nhà 'trong tài liệu của bạn ngay, và bạn đang truy vấn trên' tenants.cdock'. Điều này có nghĩa là Firestore có khả năng lập chỉ mục trên các thuộc tính lồng nhau này không? –

+0

Tôi đã cố gắng làm một cái gì đó tương tự nhưng khi truy vấn Firestore nói với tôi rằng nó cần phải tạo ra một chỉ mục đầu tiên, và muốn lập chỉ mục mọi khóa có thể có như 'tenants.cdock', 'tenants.alice' vv. tên người thuê nhà ở đây, vì vậy tôi không thể lập chỉ mục tất cả trước khi truy vấn. Làm thế nào để bạn có được xung quanh này? –

+0

@ThijsKoerselman có thông tin trong tài liệu về điều này, trong trường hợp bạn chưa tìm thấy nó: https://firebase.google.com/docs/FireStore/giải pháp/mảng # solution_a_map_of_values ​​ Bạn mã hóa thông tin ở những cấu trúc dữ liệu, chẳng hạn như một dấu thời gian như giá trị đến khóa: ' 'thuê': { 'cdock': 1502144665, 'alice ': 1502144665, ' bob ': 1502144665 } ' ít nhất cho phép bạn có khả năng truy vấn phạm vi trên các thuộc tính này .. – cdock

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