-5

例如:

An item
{
size:23"
Resolution:1920*1080
Panel:IPS
}
(as in an usual table)

mysql 中的一个存储通常的方式是创建一个列名“大小”等。但是,由于我关心的对中的第一项是不确定的(比如我希望用户能够输入像 producer:samsung 这样的数据;或者用户想要输入的任何数据对)

有没有办法在mysql中优雅地做到这一点?也许是一个常见的分隔字符串?在任何情况下,我都希望这些数据能够轻松地输出为表格,并可能进行搜索,例如获取 size=22" 的所有项目。

4

2 回答 2

2

MySQL 解决方案。

Entity    Key        Value
An item   size       23"
An item   Resolution 1920*1080
An item   Panel      IPS

SELECT * FROM table where Entity = 'An item'; //Selecting info on an item

SELECT * FROM table where Entity IN   //Selecting info on items with size = '22"'
   (SELECT Entity WHERE Key = 'size' AND Value = '22"');

注释:

  • 所有数据都存储为字符串,数据库类型检查丢失且效率低下
  • 大量的应用程序逻辑和子查询。
  • 您可以将实体设为 ID,并为实体名称和任何必填字段设置另一个表。
  • 这是一个多字段键表(Entity,Key)

为什么这是最好的方法:

  • 单个字段中的逗号分隔值破坏了数据库的全部意义。

该属性是第一范式。如果您将多个值放在一个字段中,您将无法使用 SQL 对该字段进行排序(至少不能以相当快的方式)。

您还需要处理解析等问题 - 必须转义更多字符。

  • 在运行时更改表模式和添加新字段也对性能不利。

你最终会得到非常稀疏的表,大量的 NULL 条目。

于 2012-12-29T16:30:29.397 回答
1
table_name( primary_key, pair_name, pair_value)

select *
from table_name
where (pair_name = 'size' and pair_value = '22')
and primary_key = ........
于 2012-12-29T16:21:17.710 回答