2008-09-29 52 views
3

我正在開發一個SaaS應用程序,其中每個客戶將根據他們購買的版本,他們購買的附加功能等具有不同的配置。例如,客戶可能有3個自定義報告。管理配置數據的最佳方式

顯然我想將這個配置存儲在數據庫中,但我不確定最好的方法。我們希望能夠在將來添加額外的功能而不需要更改數據庫模式,因此具有每個配置列的單個表是不明智的。

可能的選項是每個客戶有一個條目的表,其中包含該客戶的整個配置的XML字段,但是當XML模式更改以添加附加功能時會增加複雜性。

我們可以使用具有鍵值對的表,並將所有配置設置存儲爲字符串,然後解析爲正確的數據類型,但這似乎有點混亂,就像爲字符串配置選項提供了單獨的表一樣,整數配置選項等。

對於這種人們​​正在使用的場景,有沒有很好的模式?

回答

2

我認爲這取決於您的產品如何銷售給客戶。

如果僅在包裝出售...

PACKAGE 1 -> 3 reports, date entry, some other stuff. 
PACKAGE 2 -> 6 reports, more stuff 
PACKAGE 3 -> 12 reports, almost all the stuff 
UBER PACKAGE -> everything 

我認爲這將是更容易安裝的軟件包,並鏈接到該表。

如果你本身有變化賣出每個模塊...

Customer wants 4 reports a week with an additional report every other tuesday if it's a full moon. 

那我就 -

Create a table with all the product features. 
Create a link table for customers and the features they want. 
In that link table add an additional field for modification if needed. 

客戶

customer_id (pk) 

模塊

module_id (pk) 
module_name (reports!) 

CUSTOMER_MODULES

module_id (pk) (fk -> modules) 
customer_id (pk) (fk -> customers) 
customization (configuration file or somesuch?) 

這是很有道理的我。

1

鍵值對錶,但與一切存儲爲一個字符串,並與另一列(如有必要)存儲值應該被轉移到哪種類型。

CREATE TABLE configKVP(clientId int, key varchar, value varchar, type varchar) 

如果該值無法轉換爲該類型,那麼您知道這是錯誤配置,並且沒有歧義。

2

如果您的數據庫是SQL Server 2005+,您的鍵/值表可以使用值字段的SQLVARIANT數據類型 - 第三列存儲您需要將其轉換爲使用的數據類型。

通過這種方式,您可以從字面上將數字不同的&不同大小的文本值插入到相同的字段中。

3

其實,我沒有看到這裏需要不同的配置。您需要的是授權級別和適當的用戶界面,而不是顯示用戶未支付的功能。

這種應用程序的良好授權數據模型是基於角色的訪問控制(RBAC)。 Google是你的朋友。

2

你爲什麼如此害怕架構改變?當你改變你的應用程序時,你無疑會需要額外的配置數據。這將需要其他模式更改,爲什麼要害怕?

模式更改是您應該能夠容忍的事情,納入您的開發,測試和發佈流程,並在未來的設計更改中使用。

模式發生變化;習慣它:)

相關問題