Nosql
使用 NoSQL 建模文件共享權限
我想第一次使用 NoSQL 數據庫,並且打算使用 MongoDB。我有一個項目,員工
@employeed_id
可以使用 Web 應用程序獲取他可以閱讀的文件列表。如果這是一個關係數據庫,我可能會像這樣開始我的 SQL 語句來獲取他可以讀取的所有文件(我將用簡單的英語解釋我接下來要實現的目標):SELECT * FROM t_document WHERE EXISTS ( SELECT 1 FROM t_user WHERE t_user.user_id = t_document.author_id AND t_user.user_id = @employee_id ) OR EXISTS ( SELECT 1 FROM t_user WHERE EXISTS ( SELECT 1 FROM t_document_share WHERE t_document_share.user_id = t_user.user_id AND t_document_share.read_access = 1 ) AND t_document.company_id = t_user.company_id AND t_user.user_id = @employee_id ) OR EXISTS ( SELECT 1 FROM t_user WHERE EXISTS ( SELECT 1 FROM t_document_group_share WHERE t_document_group_share.read_access = 1 AND EXISTS ( SELECT 1 FROM t_user_group WHERE EXISTS ( SELECT 1 FROM t_user WHERE t_user.user_id = t_user_group.user_id AND t_user.user_id = @employee_id ... ... ) ) ) )
本質上,我的意思是讓我獲得至少適用以下條件之一的所有文件:
- 我是文件的作者
- 該文件已與我共享,我具有讀取權限,並且該文件歸我所在的公司所有
- 該文件已與我所屬的組共享。該組對文件具有讀取權限。我、組和文件都屬於同一公司
在進行了一些快速的線上研究後,我了解到我的案例不適用於 NoSQL。在 NoSQL 中,所有這些用於調查不同實體之間關係的子查詢(以及可能的連接)都很麻煩。 所以我的問題是,有人可以確認使用 NoSQL 解決我的問題是否就像試圖讓魚爬樹一樣? 如果是這樣,那麼我會尋找其他項目來練習 NoSQL
我想我會回答我自己的問題,直到有人給出更好的答案。
當實體之間的關係是已知的並且需要保留時,這些關係在 NoSQL 數據庫中實施和執行的成本很高。查看實體之間的關係很容易使用由更多子查詢和連接組成的單個 SQL 語句來完成。與關係數據庫/SQL 方法相比,使用查找或其他 javascript/json 程式指令執行類似操作很麻煩,並且可能在計算上更加密集。
因此,在許多實體之間的關係是已知的、重要的保留和重要的執行的情況下使用 NoSQL 數據庫,就像使用牛排刀砍樹一樣。這是可以做到的,但有更好的工具來完成這項工作。