运行 Postgres 7.4(是的,我们正在升级)
我需要将 1 到 100 个选定项目存储到数据库的一个字段中。 98% 的情况下,只会输入 1 个项目,而 2% 的情况下(如果是这样的话)会输入多个项目。
这些项目只不过是文本描述,(截至目前)长度不超过 30 个字符。它们是用户选择的静态值。
想知道用于存储所需数据的最佳列数据类型。我在想 BLOB 但不知道这是否有点过头了。也许是 JSON?
我也确实想到了 ENUM,但到目前为止我还不能真正做到这一点,因为我们正在运行 Postgres 7.4
我还希望能够轻松识别输入的项目,这样就不需要映射或引用表。
您在这里有几个问题,所以我将分别解决它们:
我需要在数据库的一个字段中存储多个选定的项目
我的一般规则是:不要。这几乎是一件事requires带有外键的第二个表(或第三个表)。当然,现在看起来可能更容易,但是如果用例出现在您需要实际单独查询这些项目的地方怎么办?这还意味着您有更多的延迟实例化选项,并且跨多个框架/语言拥有更一致的体验。此外,您不太可能遇到连接超时问题(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 映射到基表,而 items_id 将映射到项目表。
如果您想要一种简单的方法从数据库中检索它,那么创建一个执行连接的视图。您甚至可以创建插入和更新规则,这样您实际上只处理一张表。
我应该使用什么格式存储数据?
如果您必须做这样的事情,为什么不直接使用字符描述的字符串呢?与 CSV、XML 或 JSON 相比,它需要的处理能力更少,而且更短。
我应该使用什么列类型来存储数据?
就我个人而言,我会使用TEXT
。听起来你不会通过将此作为一个BLOB
, and TEXT
根据我的经验,如果您使用某种形式的 IDE,则更容易阅读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)