Pivot

什麼是單表關係數據庫

  • April 1, 2022

我在 Google 上搜尋了單表關係數據庫的定義,除了重定向到其他數據庫模型之外什麼也沒找到。這是怎麼回事?為什麼這個概念令人困惑?每個關係數據庫也是一個單表關係數據庫。標準 RDBMS 表示與其單表表示之間的主要區別在於,關係管理在數據中,而不是在管理表的工具中。

RDBMS 被視為單表和標準

如上圖所示,RDBMS 的單表形式是普通表的樞軸。每個值都由 TableID、ColumnID 和 RowID 中的位置標識。只是一個二維外鍵矩陣。該值還需要鍵入,這是一個通常由 RDBMS 表管理工具處理的功能(這可能需要也可能不需要多個值列,其中只有一個位置不為空)。

數據庫的單表形式比標準表形式具有獨特的優勢。如圖所示,語義被刪除。關係由數據描述處理,而不是由表格工具處理。這使得關係本體成為儲存過程的輸入,儲存過程將數據返回給使用數據的各種應用程序。您可以使用層次結構、圖形數據庫三元組或其他任何東西。當然,您始終可以將表格轉回其原始形式。

例如,在過去的 18 年中,我一直在使用一種單表 RDBMS 形式來記錄建築運營的歷史(VAV w/Rht 是一種空調設備)。 單表 RDBMS Historian

我在單表展示文稿中添加了四列。語言列允許以選擇的語言顯示表名和列名。這允許數據庫以任何語言工作。EntryDate、IsActive 和 UserID 允許根據進行更改的時間將編輯和刪除(標記為非活動,未刪除)歸因於使用者。這使得數據庫記錄在逐個欄位的基礎上不可變。

我錯過了什麼嗎?有沒有我18年沒遇到過的隱藏缺陷?這是一個嚴重的問題。我正在與一個致力於與工程師合作建立和控制更好的供暖和空調系統的國際協會合作。想想氣候變化。他們正在尋求定義一個建築數據交換標準,我認為單表 RDBMS 將消除他們面臨的許多挑戰。

從性能或併發性的角度來看,不希望在邏輯上只影響一個表的操作影響數據庫中的每個表。例如,考慮將具有預設值的新列添加到具有十億行的傳統表中。對於 SQL Server,這通常是一種非常快速的元數據操作。使用您的結構,您需要在主表中插入至少十億行。在十億行插入期間究竟會發生什麼?插入會升級到表級別並阻止所有其他程序嗎?插入不會升級並且您會為十億行持有頁面鎖嗎?插入是否會被分解為單獨的事務,因此相當於ALTER TABLE ... ADD [COLUMN_NAME]不再是原子操作?

這也不是最壞的情況。考慮將 Standard Edition 上的索引添加到您的主表。索引建構過程需要在持有 Sch-M 鎖的同時掃描整個表。添加索引將有效阻止對整個數據庫的任何類型的訪問。

我錯過了什麼嗎?有沒有我18年沒遇到過的隱藏缺陷?

這在我看來是基於 EAV 模式(或“財產包”),可能具有所有可能的缺點。

標準 RDBMS 表示與其單表表示之間的主要區別在於,關係管理在數據中,而不是在管理表的工具中。

這種關係管理是如何執行的?如果您沒有為此使用數據庫,那麼您就沒有關係數據庫,您只是在使用關係數據庫系統來存放類固醇的屬性包。

我認為單表 RDBMS 將消除他們面臨的許多挑戰。

您認為該模型比 RDBMS 中的其他結構能更好地解決哪些問題?

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