2011-12-13 49 views
2

我們正在嘗試構建類似於電子表格或數據庫表的非常基本版本的東西。我們有行和列,我們希望用戶能夠添加行或列,並進行一些基本的排序/過濾。用於將網格狀數據存儲在數據庫中的模式

我們有的一個概念是簡單地爲我們要存儲的每個「文檔」創建一個新的數據庫表。這樣,SQL就簡單快捷。但是,這帶來了很多問題,包括爲每個客戶端管理不同的表,需要添加新列時必須執行「ALTER TABLE」語句以及類似的問題。

那麼,在數據庫的單個(或多個)表中存儲具有未知列的網格狀數據的最佳方式是什麼?這樣排序和過濾不會變成噩夢?

回答

2

直到你分享你正在試圖完成的任務的詳細信息,這簡單的ER模型可能是一個良好的開端:

enter image description here

ROWCOLUMN是電子表格內的整數「座標」。

優點:

  • 簡單。
  • 對「排序」和「篩選」可能非常有效。
  • 「稀疏」數據的有效(存儲方式) - 即電子表格中存在大「洞」的地方。

缺點:

  • 低效(存儲明智)的「密集」的數據,因爲大量的重複會在細胞的PK發生。
    • 根據您的DBMS,您可以使用壓縮索引來最小化空間開銷。
    • 你甚至可以使用壓縮聚集表key-compressed index-organized table在甲骨文的說法),具有能夠訪問調用的不幸後果有效按行或按列,但不能同時和能力有限按VALUE過濾(二級索引在集羣表中很貴)。
  • 您必須事先選擇VALUE的類型,這使得存儲非統一類型的值變得非常尷尬。有辦法解決這個問題,但它們增加了複雜性,並可能成爲性能問題。
+0

+1&Accepted - 非常感謝!我使用這種將CellColumns分離到自己的表中的模式稍作修改,以便我可以存儲一些關於它們的附加數據(例如標題,數據類型等)。我感謝幫助! –

相關問題