我需要存储每个帐户个人资料的帐户设置。我决定使用SQL DB,但不确定我应该使用复杂的数据(json / xml)。
我找到了答案
Using a Single Row configuration table in SQL Server database. Bad idea?
但他们都没有讨论使用包含复杂数据的单行方法
复杂数据将存储在以下数据库表
中AccountID int
AccountSettings nvarchar(max)
并包含AccountSettings数据,例如
"settings": {
"branding": {
"header_color": "1A00C3",
"page_background_color": "333333",
"tab_background_color": "3915A2",
"text_color": "FFFFFF",
"header_logo_url": "/path/to/header_logo.png",
"favicon_url": "/path/to/favicon.png",
},
"apps": {
"use": true,
"create_private": false,
"create_public": true
},
"tickets": {
"comments_public_by_default": true,
"list_newest_comments_first": true,
"collaboration": true,
"private_attachments": true,
"agent_collision": true
"list_empty_views": true,
"maximum_personal_views_to_list": 12,
"tagging": true,
"markdown_ticket_comments": false
},
"chat": {
"maximum_request_count": 5,
"welcome_message": "Hello, how may I help you?",
"enabled": true
},
"voice": {
"enabled": true,
"maintenance": false,
"logging": true
},
"twitter": {
"shorten_url": "optional"
},
"users": {
"tagging": true,
"time_zone_selection": true,
"language_selection": true
},
"billing": {
"backend": 'internal'
},
"brands": {
"default_brand_id": 47
},
"active_features": {
"on_hold_status": true,
"user_tagging": true,
"ticket_tagging": true,
"topic_suggestion": true,
"voice": true,
"business_hours": true,
"facebook_login": true,
"google_login": true,
"twitter_login": true,
"forum_analytics": true,
"agent_forwarding": true,
"chat": true,
"chat_about_my_ticket": true,
"customer_satisfaction": true,
"csat_reason_code": true,
"screencasts": true,
"markdown": true,
"language_detection": true,
"bcc_archiving": true,
"allow_ccs": true,
"advanced_analytics": true,
"sandbox": true,
"suspended_ticket_notification": true,
"twitter": true,
"facebook": true,
"feedback_tabs": true,
"dynamic_contents": true,
"light_agents": true
},
"ticket_sharing_partners": [
"foo@example.com"
]
}
其他解决方案是广泛使用的单行方法,如 AccountID int SettingsName nvarchar(max) SettingsValue nvarchar(max)
可能包含
等数据AccountID SettingsName SettingsValue
1 Branding.Header_Color 1A00C3
1 Branding.Page_Background_Color 333333
1 Apps.Use true
...
我认为这两种解决方案都是有效的,并且取决于应用程序的需求,但我们真的想知道在使用单行方法存储应用程序设置的复杂数据时是否存在一个问题?
答案 0 :(得分:0)
一个问题是,如果您拥有繁忙的大型数据库,则无法对XML,text,varchar(max)类型字段执行ONLINE重新索引(如果您有Enterprise版本)。这导致2008 R2的悲痛。较新版本的MS SQL Server可以重新索引在线varchar(max)字段,因此它取决于您运行的版本。
此外,如果您需要搜索特定记录,则无法查询或索引,除非您使用我经常使用的SettingsName,SettingsValue类型的表。这解决了重新索引在线问题(如果这适用于您的情况),以及索引字段以便快速查询。