将数组存储为字段值或将数组值存储为记录是一个好主意吗?

2023-12-20

在我的应用程序中,我有“文章”(类似于帖子/推文/文章),它们标有描述性预定义标签:即“困难”、“简单”、“红色”、“蓝色”、“业务”等

这些可用标签存储在一个表中,称为“标签”,其中包含所有可用标签。

每篇文章都可以标记多个标签,并可通过自定义管理界面进行编辑。

简单地将每个实体的标签捆绑到每个标签的 ID 的字符串化数组中并将其与文章记录一起存储在我的“文章”表中可能很诱人:

id | title | author | tags
---+-------+--------+-------------
1  | title | TG     | "[1,4,7,12]"

尽管出于多种原因我确信这是一个坏主意,但是否有合理的理由执行上述操作?


我想你应该读一下数据库规范化 https://en.wikipedia.org/wiki/Database_normalization并自己决定。简而言之,您的提案存在许多问题,但您可能会决定接受这些问题。

最明显的是:

  1. 如果将附加标签添加到 row(1) 会怎样?您是否必须首先解析,检查它是否已经存在,然后将行更新为tags.append(newTag).
  2. 更糟糕的是删除标签?搜索标签,存在,重新创建标签。
  3. 如果标签要更改名称(也许需要进行一些审核过程)怎么办?
  4. 更糟糕的是,不同的人以不同的方式指定标签名称怎么办——这很难合理化。
  5. 如果想根据标签查询数据怎么办?您的查询变得比需要的复杂得多。
  6. 表示:客户端必须解析标签才能使用它。分隔符字段怎么样?改变这一点,所有客户都必须改变。

简而言之,所有这些操作都变得更加困难和繁琐。标准化旨在克服此类问题。在我看来,执行您所说的操作的唯一原因可能是您一次性捕获数据,并且它只是信息性的 - 也就是说,对用户有意义,但对系统本身没有意义。这有点像说最好避免它(再次,IMO)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数组存储为字段值或将数组值存储为记录是一个好主意吗? 的相关文章

  • 如果外键不存在,则添加外键约束(或者如果存在则删除外键约束)而不使用名称?

    我发现创建查询很困难 假设我有一个产品和品牌表 我可以使用此命令添加外键 ALTER TABLE Products ADD FOREIGN KEY BrandID REFERENCES Brands ID 但我只需要在外键不存在时运行此命令
  • 为 MongoDB 中的对象数组建立索引

    我有一个巨大的电子邮件转储 我正在尝试在 MongoDB 中存储和查询它 有 160 万封电子邮件 每封电子邮件都存储为节点模块 https github com andris9 mailparser它将原始电子邮件解析为漂亮的 Javas
  • 标记个体内事件发生后发生的日期

    我有一组长格式的数据 每人几行 人 id 其中事件 事件 1 应该只发生一次 事件发生后 该人不应再有任何数据 如果事件发生后出现任何记录 我想使用名为 flag flag 1 的新变量创建一个查询 例如 下面标记了 id 5 因为在该人的
  • 为什么 hibernate 在一张表中保存两个 @OneToMany 列表?

    想象一下使用 Hibernate 和 JPA 的简化代码如下 Entity class C Id GeneratedValue public long id MappedSuperclass abstract class A Id Gene
  • 插入后触发更新表列?

    在同一个表中添加任何记录后 我需要更新表中的列 这是我的sql代码 CREATE TRIGGER dbo EmployeeInsert ON dbo APP Employees AFTER INSERT AS BEGIN SET NOCOU
  • SQL Server 2012(代号:Denali)CTP 3的FIRST_VALUE和LAST_VALUE的实际用途是什么

    随着 Denali 的 CTP 3 版本的发布 我们有了更多的分析功能 其中我对其中两个感兴趣 a 第一个值 http msdn microsoft com en us library hh213018 28v SQL 110 29 asp
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 如何在没有 EF 的 ASP.NET MVC 中使用普通 sql?

    我有一个使用 linq to sql 的类 如何在 ASP NET MVC 3 中使用普通 sql 而不使用 EF 来实现相同的功能 public ActionResult Index var List from c in db OFFIC
  • 按小时拆分日期/时间数据并将日期/时间范围展开为行

    我正在尝试使用 SQL Server 将一系列日期 时间数据扩展为多行 例如 我的数据看起来像 Date StartTime EndTime EmployeeID ShiftType 10 1 2019 8 30 00AM 4 57 00P
  • 基于列顺序的查询速度

    数据库中列类型的顺序对查询时间有影响吗 例如 具有混合排序 INT TEXT VARCHAR INT TEXT 的表的查询速度是否会比具有连续类型 INT INT VARCHAR TEXT TEXT 的表慢 答案是肯定的 这确实很重要 而且
  • 将 Google CloudSQL Postgres 数据库连接到 Data Studio

    我正在尝试将托管在 google Cloud Sql 实例中的 Postgres 数据库连接到 Data Studio 我已按照说明进行操作 在此处找到https support google com datastudio answer 7
  • 返回行位置 - Postgres

    我返回一个带有位置的表 select from select row number over as position from organization result where data1 Hello 返回这个 这是正确的 data1 H
  • Rails 多租户架构,限制多个租户的访问范围

    目前我们有一个单租户数据库架构 MySQL 运行着超过 100 个数据库 我们使用 Apartment gem 切换子域上的数据库连接 一切都很顺利 然而 我们现在需要创建所谓的 伞 客户端 它可以访问一组现有客户端的所有数据 我不认为这对
  • SQLite同时读写

    我读过很多主题 但无法找到问题的答案 是否可以同时读写 我有后台线程更新一些数据 UI 需要存储在数据库中的一小部分数据 所以在UI线程中执行SELECT操作 但当更新正在进行时它会阻塞 结果 UI 冻结了几秒钟 有人在写入时成功从数据库读
  • 仅当变量不为空时 SQL 添加过滤器

    您好 我有疑问如下 SELECT route id ROUTE ID FROM route master NOLOCK WHERE route ou 2 AND route query l s query AND lang id 1 这里
  • 从备份恢复 PostgreSQL 数据库,没有外键约束问题

    我有一个包含大约 85 个以上表的 postgresql 数据库 我定期使用pg dump 通过 php pgadmin 在复制模式下 备份文件的大小几乎为 10 12 MB 现在我面临的问题是 每当我尝试恢复数据库时 都会出现外键约束问题
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • PHP 5 的 SQLite 编译设置是什么?

    SQLite 3 7 附带了新的预写日志记录 WAL http www sqlite org wal html并且有很多设置可以被配置 http www sqlite org compile html 但是 似乎没有任何方法可以改变任何事情
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt

随机推荐

  • Android sdk 剪切/修剪视频文件

    有没有办法在android上剪切视频 mp4或3gp 比如只使用电影的最后5秒 在iphone上可以使用AVAssetExportSession 但在android上我还没有找到类似的东西 也许对 ffmpeg 库的一些引用看起来很复杂 有
  • 错误找不到模块“umask”

    我刚刚安装节点 x64在我的 Windows 10 计算机上 我保留所有默认配置 我打开cmd并输入 npm v 然后我得到以下错误 module js 457 throw err Error Cannot find module umas
  • 无法从 Java 中的 JDateChooser 检索日期

    我在用JDateChooser from here http www toedter com en jcalendar api index html 但是我无法检索使用该方法设置的格式的日期setDateFormatString在控制台中显
  • 无论如何,要防止快速单击时 Chrome 中的元素蓝色突出显示?

    大多数时候我并不担心它 但我有一个图像轮播 如果我快速单击下一个和上一个 div 它们将在 Chrome 中突出显示 我尝试使用大纲 无但没有效果 有什么解决方案吗 对于 Android 上的 Chrome 您可以使用 webkit tap
  • 如何使用 Mapview 设置布局

    我已经创建了我在其中使用 MapView 的应用程序 现在我想在我的 MapView 中使用后退按钮 我已经开发了布局 但在地图视图上看不到按钮 当我从模拟器中按下后退按钮时 地图视图将关闭并显示后退按钮 任何朋友都可以帮我如何在 MapV
  • 在 PrestaShop 中更新 theme.yml

    所以我试图修改 PrestaShop 主题中 theme yml 的布局 我注释掉以下内容 hooks modules to hook displayFooter ps linklist ps customeraccountlinks ps
  • 有没有办法以编程方式更新框架(Swift)

    是否可以像在界面生成器中那样以编程方式更新框架 我的一些对象由于动画而错位 我猜无论如何我都想修复它 但它让我想起了前面提到的问题 编辑 我已经做了一些谷歌搜索以及在 stackoverflow 上查找 但没有找到我要找的东西 我想将一些按
  • 全局默认超时是多少

    Python 3 4 尝试查找 urllib request urlopen 中的默认超时是多少 它的签名是 urllib request urlopen url data None 超时 cafile None capath None c
  • Django 1.5b1:执行 django-admin.py 导致“没有名为设置的模块”错误

    我最近安装了 Django 1 5b1 我的系统配置 OSX 10 8 Python 2 7 1 虚拟环境 1 7 2 当我打电话时django admin py命令我收到以下错误 devel ninja Django 1 5b1 djan
  • IntelliJ Structural Search 用于查找实现 A 但未实现 B 的类

    我正在尝试使用 IntelliJ 10 5 的 结构搜索 功能来查找实现接口的类 A但不实现另一个接口 B 首先搜索实现的类A 然后将搜索范围限制为 以前的搜索结果 很容易将其减少为仅搜索未实现的类B 这在概念上非常简单 不幸的是 我还没有
  • 从 SoundCloud 的 Waveform.js 库获得更好的质量

    目前我正在使用 Waveform js http waveformjs org http waveformjs org 从 SoundCloud 轨道生成波形 不幸的是生成的canvas图像质量非常低 尤其是在视网膜上 我想创建与 Soun
  • 如何在 Selenium webdriver 中录制视频 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有每天晚上运行的自动化脚本 大约 350 个脚本或测试用例 我想录制每个测试用例 Python 脚本
  • 访问短信收件箱

    如何从应用程序 在 Symbian s60 上 访问 SMS 收件箱 我们可以用j2me吗 C 或 Python 怎么样 从 j2me 中的收件箱读取消息是不可能如果您想阅读短信 那么您可以使用特定端口发送消息并 你的 j2me 应用程序应
  • lerna add :找不到可以添加 的包

    已将 lerna 添加到我的项目中 我已通过成功运行此命令将包添加到我的服务器 lerna add types express dev 但是当我想添加另一个时 lerna add graphql class validator type g
  • 具有多个目标可执行文件的 Swift 包管理器?

    有谁知道 Swift 包管理器是否支持从一个包中生成多个可执行文件 我有一个 C 程序需要迁移到 Swift 目前它被打包为具有多个目标的 makefile 我有点困惑如何将其映射到 Swift 包 或者它是 包 Yes project p
  • Domino Designer:从嵌入视图访问选定的行

    我再次有一个关于 Domino Designer 的问题 有些时事通讯应分配给多个联系人 因此 我构建了一个包含组合框的表单来选择新闻通讯 下面有一个嵌入视图 其中包含所有可用的联系人 Combobox ComboBox Newslette
  • 无法导入名称 TEMPLATE_CONTEXT_PROCESSORS

    我尝试使用 virtualenv 但一切都出了问题 我停用 停用 所有 virtualenv 当我尝试启动时 python manage py runserver 我收到此错误消息 Traceback most recent call la
  • “JSON”和“jQuery”在 Internet Explorer 7 和 8 中仍未定义

    我把这三个流行的脚本包含在我的 tags 当我检查 IE7 和 8 中的错误时 我得到以下信息 JSON 未定义 IE7 jQue
  • 如何从 Windows 8 WInJS 应用程序中启动 IE10 中的 URL?

    这可能是一个愚蠢的问题 但我一直无法找到答案 我想从我的 Windows 8 javascript 应用程序中使用 IE10 启动特定 URL 即我的应用程序将暂停 而 IE10 将启动 我如何用 JavaScript 做到这一点 谢谢 提
  • 将数组存储为字段值或将数组值存储为记录是一个好主意吗?

    在我的应用程序中 我有 文章 类似于帖子 推文 文章 它们标有描述性预定义标签 即 困难 简单 红色 蓝色 业务 等 这些可用标签存储在一个表中 称为 标签 其中包含所有可用标签 每篇文章都可以标记多个标签 并可通过自定义管理界面进行编辑