2011-11-26 22 views
4

一直在使用Mongodb和Solr/Lucene,我開始懷疑爲什麼關係數據庫的多值字段(通常)被認爲是一個壞主意?爲什麼多值字段在關係數據庫中是一個壞主意

我瞭解關係數據庫的理論基礎和normalization。然而,在實踐中,我遇到了很多使用情況,最終我使用了鍵值對的元表來補充主表,比如在標記的情況下,我希望不必多次連接查找數據。或者需求突然從支持單個作者變爲每篇文章的多位作者。

那麼,有多值字段或供應商選擇不支持它,因爲它不是SQL標準的一部分有什麼缺點?

回答

4

主要缺點是查詢偏差。這種數據庫傾向於用一種特定的查詢來設計的現象,並且在需要編寫其他查詢時很難處理。

假設你有學生和課程,並且你對所有這些進行建模,這樣你就可以在單個表中的單行中說「John Doe需要{法語,代數,關係理論}」和「Jane Doe需要{德語,功能計算,關係理論}「。

可以很容易地查詢「所有課程的後面跟着......」,但試着設想出什麼才能產生「遵循關係理論的所有學​​生是什麼」的答案。

試想所有的東西系統本身應該是做給這樣的查詢(如果有可能將它寫)進行合理的任何機會......

1

我認爲這有其根源在於沒有簡單的標準方法將集合映射到關係世界中的列。一個mutifield值基本上是一個簡單的集合(數組字符串在大多數使用情況下),這很難表示爲。有些RDBMS通過使用分隔符支持這一點,但是再一次,即使DB驅動程序允許您在關係數據庫中使用多值字段,它也開始感覺像反模式。像MongoDB這樣的數據庫依靠類似JSON的結構來定義數據,在這些數據中集合很容易被映射和檢索。

+0

關係理論完全允許任何屬性爲任何類型,包括數組類型,元組類型或關係類型。 –

+0

同意,理論上它確實如此。 – lobster1234

相關問題