微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 如何在一列中存储数组或多个值

运行Postgres 7.4(是的,我们正在升级中)

我需要从1到100个选定的项目存储在数据库中的一个字段中. 98%的时间只会输入1个项目,而2%的时间(如果有的话)会有多个项目.

这些项目只不过是一个文本描述,(到目前为止)只有30个字符长.它们是用户选择的静态值.

想知道用于存储所需数据的最佳列数据类型.我在想BLOB,但不知道这是否是一个过度的杀手.也许JSON?

另外我确实想到了ENUM,但是到现在为止,我不能这样做,因为我们运行Postgres 7.4

我也想能够轻松识别所输入的项目,所以没有映射或引用表.

解决方法

你有几个问题在这里,所以我会分别解决他们:

我需要在数据库一个字段中存储多个选定的项目

我的一般规则是:不要.这是一个除外键外的第二个表(或第三个).当然,现在看起来可能会更容易,但是如果用例需要实际查询这些项目,那该怎么办?这也意味着您有更多的懒惰实例化选项,并且您可以跨多个框架/语言具有更一致的体验.此外,您不太可能遇到连接超时问题(30,000个字符很多).

您提到您正在考虑使用ENUM.这些值是否固定?你提前知道他们吗?如果是这样,这将是我的结构:

基表(你现在有什么):

| id primary_key sequence
| -- other columns here.

物品表:

| id primary_key sequence
| descript VARCHAR(30) UNIQUE

地图表:

| base_id  bigint
| items_id bigint

映射表将具有外键,因此base_id映射到Base表,items_id将映射到items表.

如果您想要从DB中检索出一个简单的方法,则创建一个连接的视图.您甚至可以创建插入和更新规则,以便您几乎只处理一个表.

应该使用什么格式存储数据?

如果你要做这样的事情,为什么不用一个字符描绘字符串?它将比CSV,XML或JSON处理能力更低,而且会更短.

我应该使用哪些列类型存储数据?

就我个人而言,我会使用TEXT.这听起来不像你这样做一个BLOB,而TEXT,根据我的经验,如果你使用某种形式的IDE,更容易阅读.

原文地址:https://www.jb51.cc/mssql/82937.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐