gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:07:15 25 4
gpt4 key购买 nike

运行 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

map 表:

| base_id  bigint
| items_id bigint

Map 表会有外键,所以 base_id 映射到 Base 表,items_id 会映射到 items 表。

如果您想要一种从数据库中检索它的简单方法,请创建一个执行连接的 View 。您甚至可以创建插入和更新规则,以便您实际上只处理一个表。

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

如果你必须做这样的事情,为什么不使用字符分隔的字符串呢?与 CSV、XML 或 JSON 相比,它需要更少的处理能力,而且会更短。

我应该使用什么列类型来存储数据?

就个人而言,我会使用TEXT。将其设为 BLOB 听起来并没有多大好处,而且根据我的经验,如果您使用某种形式的 IDE,TEXT 更易于阅读.

关于sql - 如何在一列中存储数组或多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com