我想创建一个包含动态数据的表,它可以是日期、 bool 值或文本文章的形式
例如:
meta_key = "isActive" 元值 = "1"
或
meta_key = "日期" meta_value = "2005 年 7 月 23 日星期六 02:16:57"
或
meta_key = "描述" meta_value = "这是一个描述,这个文本可以继续下去,所以我需要一个长字段"
问题是 meta_value 应该是什么类型的字段,以便不为每个插入的“1”使数据库膨胀太多,哪些字段是动态的,只会占用它们自己长度的空间
希望我说清楚了...
最佳答案
如果您要存储非结构化数据或文档(例如 friendfeed),我只会使用非结构化数据模型,就像您建议的那样。
替代存储思路
有很多比SQL server更适合非结构化数据的数据存储系统。我建议将其中之一与您现有的结构化数据库相结合。
SQL 选项
如果您不能这样做并且必须在您的 SQL 数据库中存储非结构化数据,您有几个选择,数据类型并不是真正唯一的问题,您的数据是如何存储的。
某些结构允许读取数据的应用程序能够轻松解析数据,而无需复杂的字符串操作函数。
能够为您的应用程序中的数据定义一个模型,这样当您读取数据时,您就会知道自己得到了什么。
以下 2 个选项为这两个挑战提供了解决方案......
XML - xml 数据类型
您需要考虑要存储的数据。如果您需要返回它并对内容执行复杂的搜索,那么 XML 是您最好的选择。它还允许您验证存储的数据是否与定义的结构匹配(使用 dtd)。请参阅这篇文章。
http://msdn.microsoft.com/en-us/library/ms189887.aspx
或 JSON - nvarchar(max) 数据类型
如果您需要返回此数据以在网页上显示或在 Javascript 中使用,那么存储为 JSON 将是最容易处理的。您可以轻松地将其加载到可以直接使用和操作的对象模型中。缺点是与 XPATH 相比,复杂的数据搜索会非常慢(遍历所有对象,找到匹配的对象)。
如果您要存储来自其他语言的数据或奇怪的字符,请使用 nvarchar(unicode 版本)。否则 varchar 将是最有效的。
关于元数据上的 Mysql 字段大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714037/