簡體   English   中英

在.net Web應用程序的ms sql中存儲自定義用戶字段的最佳方法是什么?

[英]What is best way to store custom user fields in ms sql for .net web application?

我有一個CRM應用程序,其中包含用戶可能需要用來存儲客戶和相關數據的所有通常需要的分析字段。 但是,需要為每個用戶的客戶存儲其他相關的專業數據。

我一直推遲這樣做,因為我仍然對在數據庫中存儲用戶補充數據的方式的優缺點感到困惑。

IDEA 1:永久應用程序表框架

我創建了一個框架,該框架至少需要5個表,這些表將所有用戶的所有補充數據作為永久存儲存儲。 它限制用戶只能將擴展字段添加到我們指定的表中。 它不允許用戶創建新的自定義表。

用戶可以:

  • 從列表(客戶,庫存)中選擇要添加額外字段的表。
  • 命名字段並選擇數據類型
  • 新字段將添加到他的表單中以進行輸入/編輯。
  • 框架知道該表的關鍵字段名稱(CustomerID,InventoryItemID),並且可以將這些字段結合到自定義視圖中

    (只是讓您知道為什么這嚇到我了,這里是桌子...)

    UserDefinedObject-我們的應用程序表中的鍵字段名稱列表,用戶可以選擇這些鍵字段名稱來存儲補充數據字段(存儲聯接ID所屬的父字段的名稱(例如CustomerID,InventoryItemID等)。這為JOIN ON字段提供了應用表格。

    UserDefinedObject_RefObjectType - UserDefinedObject的引用表:這是UserDefinedObject為其鍵的表名(例如,CustomerID屬於Customer。這提供了JOIN表名。)

    UserDefinedObjectAttribute-這是他們要調用自定義數據字段的用戶的選擇字段名稱。 (例如FavoriteColor)

    UserDefinedObjectAttribute_RefDataType - UserDefinedObjectAttribute的引用表:用戶要存儲在字段中的數據類型。 它存儲為字符串,但可以在需要時轉換為用戶的類型。)

    UserDefinedObjectAttributeValue-用戶要存儲的實際值和所有者(鍵值)

    例如*自定義字段( 屬性 )是FavoriteColor * FavoriteColor Blue且屬於ObjectType ,客戶*客戶行是鍵值為CustomerID 1212121的行

    最后,值存儲為字符串,但可以使用UserDefinedObjectAttribute_RefDataType讀取時將其定義為用戶定義的類型。

    優點:桌子有限。 輕松加入。

    缺點:用戶只能將字段添加到預定義的表中。 那可能就足夠了,但是?

    理念2(我傾向於這種方式):

    允許用戶(通過UI)指定的字段/類型,表名,這些表名被解析為SQL腳本以創建滿足每個用戶需求的個人半永久表。

    此外,(可選)用戶可以從應用程序表中選擇其新創建的表應加入的鍵值。 這些表將是現有應用程序表的“擴展”,從而使聯接變得非常容易。

    與框架不同,這將允許用戶選擇類似於上述框架的通用表,但將允許根據他們的需要創建非關系表。

    如果用戶不再使用該應用程序,則該用戶的表將被刪除。

    我會從現實世界的經驗中得到一些指導。

    我不確定我是否理解正確。 但是考慮到用戶想要存儲的情況,這是他最后一次購買書時。 您需要一個以某種方式將其存儲在數據庫中的數據結構,對嗎?

    我認為我們有類似的要求。 我們使用一個表來存儲以下信息: FieldName (string), FieldValue (string)和其他一些東西。 然后,我們將元數據存儲到系統中的所有字段。 例如,我們創建一個名為DateTime類型的名為LastBookBuyDate的字段。 然后,客戶端可以根據其類型呈現所有字段。 當用戶輸入一些數據時, (LastBookBuyDate, '2018-07-.....')新行添加到表中: (LastBookBuyDate, '2018-07-.....')

    因此,我們將所有數據類型混合在一起成為字符串類型的一列。 這意味着,我們在value列處沒有索引,並且無法使用它進行復雜的查詢。 但是到目前為止,還沒有要求這樣做。

    順便說一句,我不明白為什么要加入您不知道的表? 據我了解,您將根據用戶的意願動態創建表。 然后,您如何將“聯接”寫入這些表?

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM