2016-09-22 75 views
0

我已經轉移到一個新的工作場所,我們有這個特定的數據庫體系結構。該數據庫結構由4個表這種數據庫建模稱爲什麼?它有什麼好處?

驅動

1)碩士

在這裏定義列代碼,名稱和描述

行1 - 的EmpID - ID爲員工

行2 - EmpName - 僱員的姓名

2)碩士數據

在這裏定義列碼值作爲行

行1 - EMPID - 123

行2 - EMPID - 124

行3 - EmpName - 約翰

行4 - EmpName賈森 -

3)主類型映射

在這裏,你映射的列可以被映射

行1 - EMPID - EmpName

4)映射的數據

在這裏,你映射列

行1的值碩士, - 標識萬事達的ID類型數據行3

行2 - - 數據行1主類型的碩士的ID數據行2 - 主的標識類型數據行4

這種方式可以在結構內部創建任意數量的表/列/關係。有人知道這樣的數據庫架構叫什麼嗎?有什麼好處?在看到添加,維護和理解數據增加了多少複雜性之後,我發現很難找到它的好處。

我被告知,它可以節省您創建數百個表和這些列的內存在表中,這將是空的。我在RDBMS上做了大量工作,並且沒有在NoSQL DB中工作的經驗,但我認爲NoSQL無論如何都可以在屏幕後面工作?

+0

我們可以稱之爲Greenspun的第10種數據模型 - 一種特殊的,非正式指定的,錯誤纏身的,數據庫內部數據庫的一半緩慢實現。或者更簡單地說,一個愚蠢的想法。這種設計的開銷可能超過了空值的存儲需求,而不是避免你創建大量結構,它可以防止你輕鬆地查看或維護數據中的任何結構,保持完整性,索引等。這是完全可能的設計沒有空值的標準化表格。 – reaanb

+0

我會說它是「不好的做法」。 –

回答

3

「在發現添加,維護和理解數據增加了多少複雜性之後,我發現很難找到它的好處。」

這是你需要記住這個可怕的想法的唯一事情。 (順便說一下,它通常被標記爲通用名稱「EAV」或「實體屬性值」(谷歌這個詞,你會發現很多讚美以及大量的嘔吐,你評估和判斷各自的論點)。

「通用名稱」,因爲實際上許多變種都是可能的,它們在一些細節上都有所不同。舉個例子:你的是一個變體,用記錄的實體屬性值之間的「映射」替換「實體ID」的通常概念。您對該映射的概念是二元的(對於稱爲「映射」的東西並不罕見),如果要將兩個以上的實體屬性值「映射」在一起,則會產生其他問題。)

也就是說,如果你是在極少數情況下所有以下爲真:

- 你真的真的面臨「稀疏」數據
- 數據的性質改變了所有的時間(每年一次不「所有的時間」)
- 沒有dba技能可用於解決這個問題的鑽機ht way(= dba方式),或者以正確的方式處理它的應用程序的影響太大並且令人生畏
- 並且對數據不可避免地缺乏任何形式的完整性執行都不是問題業務

那麼你可能會使用這樣的方案來解決你的問題。