Database-Design

noSql 情況下數據建模的意義

  • June 1, 2021

我了解了數據建模層(概念/邏輯/物理)。我想了解建模過程如何在非關係模式上工作。

  1. 當我們使用 NoSQL 數據庫時,是否需要“規範化”模型?
  2. 當“閱讀模式”/彈性模式時,數據模型是否相關?
  3. 我覺得傳統的數據建模概念是為關係模式建構的。為其他資料結構設計數據模型時,過程是否不同?

你做數據建模不是為了安撫 Codd;您這樣做是為了確保您了解您的數據,並確保儲存在數據庫中和從數據庫中檢索的數據是完整的、一致的、非冗餘的並且符合業務規則。一些NoSQL 儲存不驗證模式這一事實並沒有給您將垃圾傾倒到其中的許可。

“讀取模式”僅僅意味著除了數據庫之外的應用層必須理解模式,並且正確記錄的模型是將該知識傳達給該層的開發人員的方式。

以上涉及概念和邏輯建模,但物理建模也是 NoSQL 數據庫的事情。考慮一下 CouchDB:您可能不需要對“表”建模,但您仍然需要考慮如何最好地實現分區,因為您的“無模式”文件的內容和典型的查詢模式;你需要什麼索引;如何處理複製衝突等

是否需要“規範化”

不是在關係建模中使用該術語,但您確實需要對模型應用某種分析和綜合,以避免數據中的冗餘和不一致。

“閱讀模式”時數據模型是否相關

當然,對於任何試圖理解數據的人來說都是如此。即使是簡單地查詢您需要了解模型的數據。您只是將此責任轉移到不同的應用程序層。

過程不一樣嗎

不多,只要你做對了。


這是一個完全非關係數據模型的範例,它同時具有關係和非關係物理實現。

在大多數案例中,無論您選擇將數據儲存在關係數據庫管理系統 (RDBMS)還是NoSQL 數據庫系統中,總會在某個時候涉及到數據模型。這兩種類型的系統在數據建模概念方面的區別在於數據模型何時發揮作用。

對於RDBMS,通常在上游定義數據模型,以便數據庫實體與數據模型本身非常相似。這在數據不一定需要分佈在多個系統中並且消費者都可以從同一個集中式伺服器訪問它的情況下非常有用,數據模型定義良好,並且不需要更改一個高頻。

對於NoSQL 系統,****數據模型通常在數據的消費者(例如應用層)中定義為具體對象。這在數據需要分佈在多個系統(例如需要支持離線數據操作的移動應用程序)的情況下非常有用,並且每個分佈式系統之間可以存在該模式的多個版本。移動應用程序是一個很好的例子,其中相同的數據可以分佈在多個系統中,作為不同的版本,但仍然可以很好地定義。

那應該回答您的後兩個問題,但是對於您關於normalization的第一個問題,這實際上取決於您的案例。規範化實際上是一個關於如何在RDBMS中結構化數據的概念,所以我不相信它具體存在於NoSQL中,它旨在支持半結構化/非結構化/可變結構化數據。話雖如此,在我看來,即使您將數據儲存在NoSQL系統中,當適用於您的案例時,遵循規範化的鬆散設計概念也是有意義的。回到我最初的觀點,在大多數案例中,數據模型將存在,即使直到應用程序層才具體定義它,如果數據庫中的實體遵循規範化的類似結構,即使在NoSQL中,它也會使消費者的工作更容易定義該數據模型。

引用自:https://dba.stackexchange.com/questions/292630