簡體   English   中英

NoSQL - 數據庫設計:如何在 NoSQL 數據庫模式中正確設計或表示關聯?

[英]NoSQL - Database Design: How To Properly Design Or Represent an Association In A NoSQL Database Schema?

我正在為我正在開發的洗車應用程序設計一個數據庫,我想知道一些事情。 該數據庫將位於 MongoDB 或 Firebase/Firestore 上。 與此同時,我花了很多時間來概念化數據庫,這就是我想出的:

在此處輸入圖像描述

我想指出,盡管這種設計包含主鍵(PK)和外鍵(FK),但當我實際構建數據庫時,它們不會這樣表示。 相反,它們將只是對外部文檔/表格的引用。 所以這是我的問題:

  1. 你們認為最簡單形式的數據庫設計正確嗎? 如果不是我做錯了什么?
  2. 你們認為OrderDetailsServiceAddonsOrder之間的關系是否正確構建?
  3. Business是否應該連接到Order而不是Service
  4. 在實際構建數據庫(MongoDB/Firebase/Any NoSQL)時,我應該如何表示OrderDetails 作為Order中的嵌入文檔,反之亦然。 我有點困惑,這是我的嘗試; 請讓我知道你的想法。

     let order = { 'order_id':'jxde5retvggfffgggv', 'customer_id':'hdksjf456jvvhgkk', 'date':'05-14-1985 13:00', 'total_amount':'1500', 'order_detail':[{ 'order_id':'jxde5retvggfffgggv', 'service_id':'ope4fghgi9nnsgu', 'addon_id': '4fhtyucfjfigpq9fh', 'quantity': 20 }, { 'order_id':'jxde5retvggfffgggv', 'service_id':'7reaolmdgfirgt8om', 'addon_id': 'sd2aqerthnnmgdpmb', 'quantity': 35 }] }

[更新 - 2019 年 10 月 5 日] 數據庫設計

我剛剛意識到需要清洗的車輛應該是訂單的一部分,所以我稍微改變了設計以反映這一點。 通過這樣做,我仍然確保仍然可以從訂單中訪問客戶,因為customer_id已附加到車輛。 請讓我知道你的想法。

在此處輸入圖像描述

如果不了解您的確切功能要求和實體的語義,就無法給出前三個問題的答案。

  1. 一般來說,您的設計看起來不錯。 但是,我對 Business、Service 和 Wash Type 的語義理解得不夠好,無法確定。 您接下來的兩個問題表明 model 的那部分可能存在問題。

  2. 由於 Service 包含作為 FK 的wash_type_id,因此圖中的一對多方向可能應該是相反的方向。 我不太明白這種關系的含義。 由於服務包含描述和單價,我想這是對客戶的報價。 但是為什么(可能)許多服務都指向相同的清洗類型? 可能將這兩者分開是有意義的,但是在不了解您的業務需求的情況下很難理解這一點。

  3. 我不確定業務實體的語義。 不同的實例是否指不同的公司提供洗車服務? 如果是這樣,答案可能應該是否定的,因為不同的公司不太可能共享相同的服務。 但是,如果 Business 僅表示同一公司的分支機構,那么所有 Business 實例的服務提供可能都是相同的,並且 Business 可能會連接到 Order。 取決於你的要求。

  4. 我不熟悉 Mongo 和 Firebase,但我知道 Couchbase。 嵌套對象的一般設計考慮是您只能通過指向其 id 從其他對象引用頂級 object。 因此,您建議的解決方案是可以的,只要您只引用來自其他對象的訂單,而不是特定的 OrderDetails。 對於很多用例來說,這應該沒問題。 但是,這將使得對使用特定服務的所有 OrderDetails 進行評估變得困難 - 找到打開所有訂單的方法,以了解它們的某些詳細信息是否涉及該服務。 反之亦然,完全沒有意義。 OrderDetail 包含在 Order 中,而不是相反。 將 OrderDetail 設為根並在其中包含 Order 意味着為每個 OrderDetail 實例重復重復訂單數據。 但是,如果您想將 OrderDetail 設為第一個 class object,則可以將其與 Order 完全分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM