具有動態屬性的對象的數據庫結構
我正在為個性化的電子郵件發送 Web 應用程序(如 MailChimp,但使用預製的動態模板)開發概念驗證。一般結構是我有我的模板(使用者可以從中選擇的不同電子郵件模板),使用者正在創建的電子郵件對象(發件人/收件人/主題),以及具有不同欄位的收件人列表(名字/姓氏/電子郵件地址/等)。Web 應用程序將是多租戶的,因此我們需要具有靈活的結構。我的問題如下:
根據使用者選擇的模板,收件人將需要或多或少的屬性(家庭地址/保險類型/促銷程式碼/性別/等)。一個模板可能只需要基本的收件人資訊,而另一個模板可能需要 50 個不同的屬性。我將有一個表模板,一個表 PersonalizedFields,其中包含 TemplateID,因此我可以知道我的收件人數據源需要哪些欄位。
我對收件人對象/表的結構猶豫不決。起初我想到了 EAV,但在閱讀了它之後,我不太確定它是最好的結構。我將使用實體框架與數據庫互動,一個收件人列表可以有 50k 條記錄和 0 到 50 個(邊緣案例)附加屬性。結構將是這樣的:
我正在考慮的另一種結構是將附加屬性放在 XML 列中,這很方便,因為我計劃使用的電子郵件撰寫工具需要 XML,但我仍然需要處理它:
或者也許是我不知道的第三種結構?
原始數據將從 XLS(X)/CSV 文件中讀取,然後寫入數據庫,然後從數據庫中讀取以格式化為 XML 字元串。
什麼是最好的資料結構?
用於概念驗證和未來項目的技術將是 C#,用於 Web 應用程序的 ASP.NET MVC,用於執行繁重處理的服務的 ASP.NET MVC API,以及用於數據庫的 SQL Server 2008 . 實體框架將用於與之互動。
您似乎只想使用每個收件人的唯一數據來填寫電子郵件模板。如果這是真的,那麼我會推薦選項 3。我將有一個不直接連結到電子郵件的收件人表,而是通過連接錶鍊接到電子郵件。我還將在收件人表上為電子郵件發件人放置一個 FK。然後我基本上會遵循你的 EAV 模型。
這樣,您的“收件人”表更像是發件人的聯繫人表。EAV 模型允許您輕鬆選擇模板的自定義數據,使您能夠輕鬆擴展數據點,並讓您有機會允許您的使用者使用他們想要的欄位創建自己的模板。發件人也獲勝,因為他們可以將 50 多個數據點重用於未來的電子郵件,因為我們將收件人表與電子郵件分離。