元数据上的 Mysql 字段大小

标签 mysql database entity-attribute-value

我想创建一个包含动态数据的表,它可以是日期、 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/

相关文章:

json - 将任何 JSON 读入 SQL Server 中的键值对列表(EAV 格式)

python - Django : Table doesn't exist

php - PDO 无法连接到 MySQL 但 CLI 可以

php - MYSQL 表建议

SQL Server DDL 脚本为数据库中的每个表追加(或删除)同一组列?

c# - 在组合框中显示数据表中的两列

可变数量属性的数据库设计

mysql - 获取多个产品属性作为 "catalog_product_entity"上的列

python - 无法从我的数据库访问某些信息与 django 的多对多关系

mysql - 在 MySQL 中使用平面列或关系