好的,這是非常棘手的。究其原因,我說,是因爲你提出了兩個要求:
- 輕鬆庫模式,讓您可以存儲各種數據和改變什麼會動態保存後
- 固定數據庫架構,這樣你就可以查詢數據有效
解決方案將是一個妥協。你必須明白這一點。
讓我們假設你有用戶表:
+----------------
| User
+----------------
| UserId (PK)
| ...
+----------------
1)XML二進制大對象的方法 您可以將數據作爲一個博客(大XML)保存到列表(實際上是財產袋),但查詢(過濾)將是一場噩夢。
+----------------
| CustomProperty
+----------------
| PropId (PK)
| UserId (FK)
| Data of type memo/binary/...
+----------------
好處是您(業務邏輯)擁有架構。這同時也是該解決方案的缺點。另一個巨大的缺點是查詢/過濾將非常困難和慢!
2)每個屬性表 另一個解決方案是爲每個屬性(主頁等)製作一個特殊的表。該表將包含每個用戶的價值(基於FK的用戶表格)。
+----------------
| HomePage
+----------------
| HomePageId (PK)
| UserId (FK)
| Value of type string
+----------------
這種方法的優點是您可以快速查看該屬性的所有值。缺點是你將有太多的表(每個自定義屬性一個),並且你會在查詢操作中經常聯接表。
3)CustomProperty表 在此解決方案中,您有一個表包含所有自定義屬性。
+----------------
| CustomPropertyEnum
+----------------
| PropertyId (PK)
| Name of type string
+----------------
+----------------
| CustomProperty
+----------------
| PropId (PK)
| PropertyId (FK)
| UserId (FK)
| Value of type string
+----------------
在此解決方案中,您將所有自定義屬性存儲在一個表中。您還有一個特殊的枚舉表,可以讓您更高效地查詢數據。缺點是你會在查詢操作中經常連接表。
請自行選擇。我會根據你的工作量決定在2到3之間(最可能是3,因爲它更容易)。