2010-02-23 58 views
6

通常,當我需要存儲系統屬性(如管理信息,版本等)時,我使用平面文件(database.properties,init.properties等)。這在我每天看到並使用的其他程序中似乎很常見。在數據庫中擁有一個屬性表是一個壞主意嗎?

有時一個平面文件由於多種原因不理想。將Web應用程序部署到衆多客戶端通常會受到限制。在這些情況下,我使用數據庫表來保存信息。例如,假設我有一些我想要保存的管理數據,也許還有一些關於我的環境的細節。我可能會做這樣的事情:

property_entry_table

[id, scope, refId, propertyName, propertyValue, propertyType] 
1, 0, 1, "DB_VER", "2.3.0", "FLOAT" 
2, 0, 1, "LICENCE", "88475", "INT" 
3, 0, 1, "TOP_PROJECT", "1", "INT" 
4, 0, 1, "SHOW_WELCOME", "F", "BOOL" 
5, 0, 1, "SMTP_AUTH", "SSH", "STRING" 
6, 1, 1, "ADMIN_ALERTS", "T", "BOOL" 

我意識到這打破了SQL的打字讓我各種類型存儲爲字符串。這是一種好的做法,還是我一直在以這種錯誤的方式進行討論?

如果沒有,我應該用什麼方式存儲這種類型的信息?

+1

只要它是一些系統屬性的存儲等,它沒有問題。只是不要想法存儲**所有**這樣的數據!請參閱這裏討論,爲什麼:也許是推動的原因:http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/ – 2010-02-23 19:26:26

+0

這個問題,爲什麼我在這裏投票:http://stackoverflow.com/questions/2300356/using-a-single-row-configuration-table-in-sql-server-database-bad-idea/2300450#2300450 – Stephano 2010-02-23 20:03:17

回答

1

我已經使用了類似的結構來存儲屬性數據,我認爲這很好,只要表格保持相對較小即可。像這樣的實體屬性值(EAV)表可能會消耗更多的空間並顯示比傳統的列結構錶慢的查詢性能,但這對於合理大小的應用程序屬性集應該不是問題。

+0

不錯的鏈接。看起來像我有一些傍晚的閱讀要做。 – Stephano 2010-02-23 20:05:39

0

這對少量非常不常訪問的數據很好。

對於查看模式的用戶看不到單個應用程序屬性可能實際上會更好。

這可以減少模式更新的問題。 (應用程序屬性經常被添加/刪除。)

它不適合的是大量數據或頻繁訪問的數據,因爲每次檢索都有更多的數據庫工作要做,而且佔用的空間更多,而不是傳統的模式。

2

我認爲這很好,但是您可能會考慮在讀取內容時在內存中緩存數據,以便您不必一直返回數據庫。如果你緩存你的數據,然後將它存儲在任何地方,使你的更新最容易。將數據保存在數據庫中的好處是,維護或創建界面來管理這些屬性可能會更容易,特別是一旦您開始爲您的應用程序使用分佈式環境。

+1

有趣的想法來緩存信息。過去我曾經通過緩存一些我需要的前端數據來完成這項工作。 – Stephano 2010-02-23 20:06:21

相關問題