Mysql 对于数据库表来说,保存序列化数据是一种糟糕的做法吗?

Mysql 对于数据库表来说,保存序列化数据是一种糟糕的做法吗?,mysql,database,json,Mysql,Database,Json,在我的web应用程序中,我将用户配置文件信息存储在编码的JSON数组中,下面是一个示例 {"youtube":"username","skype":"username","facebook":"username","twitter":"username","googlep":"username","steam":"username","origin":"username"} 这种做法不好吗?是的,请参见:必须在一个字段中存储一个值。而且不是多重的 您最好选择第二张桌子,如: user_id

在我的web应用程序中,我将用户配置文件信息存储在编码的JSON数组中,下面是一个示例

{"youtube":"username","skype":"username","facebook":"username","twitter":"username","googlep":"username","steam":"username","origin":"username"}
这种做法不好吗?

是的,请参见:必须在一个字段中存储一个值。而且不是多重的

您最好选择第二张桌子,如:

user_id   |  system   | username
   1      |  youtube  | the name
 .............................
user\u id
是用户表的外键。并且您有一个组合主键(
user\u id
system

更新
在生产中,标准化的正常水平为3级。因为实现更高的规范化是相当困难的。当然,出于几个原因(我在这里看不到您的),不规范表/模型或其部分可能对我有好处。

正如Burhan Khalid在其评论中所说的,这取决于您想要实现什么。如果您只是存储这些数据以便以后显示,这是很好的。因此,您将不会有将数据转换为JSON的开销。顺便说一下,这项技术被称为

这样一个JSON字段的问题是不能用SQL查询它。所以这些数据在某种程度上丢失了。但是,如果您不需要搜索这些数据,您可以简单地存储它们并在客户端处理数据


但是,如果需要访问数据,则应该访问数据库。因此,您将能够查询数据,并且必须将结果转换为JSON字符串。这是一个非常简单的函数。

取决于您计划如何处理这些信息?这取决于。通常,我会有单独的列,因此您可以强制执行大小限制并在查询中使用值,但有些系统确实在单个列中保存序列化数据块。Wordpress出现在我的脑海中,它似乎在那里工作得很好!当我看到标题时,我想你会问MySQL是否是一个糟糕的做法,我正要说是的。)但回到你的问题:我认为它违反了fist标准形式。@BurhanKhalid我只是在用户的个人资料页面上显示它,我不使用它作为任何类型的索引。你打算对它进行搜索吗?例如,根据用户的skype名称查找用户,或防止注册重复的skype名称?规范化取决于使用情况。对于快速读取,首选非规范化。在您的案例中,答案需要上下文,因为我确信您对OP的用例做了一些假设。关系模型允许值任意复杂。值甚至可以是表。关系问题是dbms如何处理这些复杂值。dbms必须返回它们不变,或者提供在复杂结构上运行的函数。日期和时间戳表示复杂的值,但dbms提供了对其进行操作的函数,并返回例如年、周或星期几。好吧,这是一个很好的观点@MikeSherrill'Catcall'