如何将事物的组合映射到关系数据库?

2024-05-16

我有一个表,其记录代表某些对象。为了简单起见,我假设该表只有一列,这是唯一的ObjectId。现在我需要一种方法来存储该表中的对象组合。组合必须是唯一的,但可以是任意长度。例如,如果我有ObjectIds

1,2,3,4

我想存储以下组合:

{1,2}, {1,3,4}, {2,4}, {1,2,3,4}

订购不是必需的。我目前的实现是有一个表Combinations那个地图ObjectIds to CombinationIds。因此每个组合都会收到一个唯一的 ID:

ObjectId | CombinationId
------------------------
1        | 1
2        | 1
1        | 2
3        | 2
4        | 2

这是上面示例的前两个组合的映射。问题是,查找的查询CombinationId特定的组合似乎非常复杂。该表的两个主要使用场景是迭代所有组合,以及检索特定组合。该表将被创建一次并且永远不会更新。我在用SQLite http://www.sqlite.org/通过 JDBC。是否有更简单的方法或最佳实践来实现这种映射?


问题是,查找特定组合的 CombinationId 的查询似乎非常复杂。

应该不会太糟糕。如果您想要包含所选项目的所有组合(允许使用其他项目),则类似于:

SELECT combinationID
FROM Combination
WHERE objectId IN (1, 3, 4)
GROUP BY combinationID
HAVING COUNT(*) = 3 -- The number of items in the combination

如果您只需要特定的组合(不允许额外的项目),它可能更像:

SELECT combinationID FROM (
   -- ... query from above goes here, this gives us all with those 3
) AS candidates

-- This bit gives us a row for each item in the candidates, including 
-- the items we know about but also any 'extras'
INNER JOIN combination ON (candidates.combinationID = combination.combinationID)

GROUP BY candidates.combinationID
HAVING COUNT(*) = 3 -- Because we joined back on ALL, ones with extras will have > 3

您还可以在此处(或在原始查询中)使用 NOT EXISTS,这似乎更容易解释。

最后,您也可以有一个简单的查询

SELECT combinationID
FROM Combination AS candidates
INNER JOIN Combination AS allItems ON 
  (candidates.combinationID = allItems.combinationID)
WHERE candidates.objectId IN (1, 3, 4)
GROUP BY combinationID
HAVING COUNT(*) = 9 -- The number of items in the combination, squared

换句话说,如果我们正在寻找 {1, 2},并且存在与 {1, 2, 3} 的组合,我们将得到一个 {candidates, allItems}JOIN的结果:

{1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}

额外的 3 结果为COUNT(*)之后 6 行GROUPing,而不是 4,所以我们知道这不是我们想要的组合。

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

如何将事物的组合映射到关系数据库? 的相关文章

  • SQL Server 将 varbinary 转换为字符串

    我想在 T SQL 中进行转换varbinary类型转字符串类型 这是一个例子 首先我得到了这个varbinary 0x21232F297A57A5A743894A0E4A801FC3 然后我想将其转换为 21232f297a57a5a74
  • SQL Server:我可以使用 EXEC 来运行外部应用程序吗?

    您好 感谢您抽出时间 我一直在网上到处搜索一个示例 其中 SQL 触发器将运行外部应用程序 但我没有运气 我所看到的是 EXEC 将执行 SQL 过程 我需要这个的原因是 我有一个包含许多表的 SQL Server 2010 当某些表上发生
  • 如何在 SQL 中将整数列值加 1

    我的问题是 如何将列的值加 1 例如 假设有一列ID值为 1 2 3 4 现在当我更新这张表时ID列应增加 1 Now ID将变成 2 3 4 5 为表中的每个值加一 UPDATE myTable SET ID ID 1 要创建一个新值 比
  • Flutter mysql1 数据包乱序

    我在建立 VPS 与图书馆的连接时遇到一些问题mysql1上颤动 我收到这个错误Unhandled Exception Error 1156 08S01 Got packets out of order当我执行查询时 MySQL服务器版本
  • SQL - .NET - SqlParameters - AddWithValue - 未指定参数类型时是否会对性能产生负面影响?

    http msdn microsoft com en us library system data sqlclient sqlparametercollection addwithvalue aspx http msdn microsoft
  • t-sql 中的行相乘

    我有下表 ID Number 1 41 5 2 42 5 3 43 5 2 44 5 2 45 5 1 46 5 1 47 5 我需要编写一个查询 该查询将返回不同的 ID 和相应的 Number 列值相乘 对于给定的表结果应该是这样的 I
  • 在同一分区上应用多个窗口函数

    是否可以将多个窗口函数应用于同一分区 如果我使用的词汇不正确 请纠正我 例如你可以这样做 SELECT name first value over partition by name order by date from table1 但有
  • JPA (Hibernate) 与 OneToOnemappedBy 注释相关的问题

    当我设置一对一关系时 我有两个表 比尔和比尔简单条目 每个账单有一个 BillSimpleEntry 这是他们的结构 CREATE TABLE bill id bigint 20 NOT NULL AUTO INCREMENT PRIMAR
  • 使用数据库、php、js 确定餐厅现在是否营业(就像 yelp 那样)

    我想知道是否有人知道 yelp 如何确定哪些餐厅 现在营业 我正在使用 html javascript php 开发类似的应用程序 我将在数据库中每天有一栏 以 2243 格式 晚上 10 43 以逗号分隔的时间 例如 如果一家餐厅供应午餐
  • ORACLe PROCEDURE - AUTHID 仅允许在模式级别

    在尝试通过过程创建表时 我遇到了类似的错误 错误 73 9 PLS 00157 仅在架构级程序上允许 AUTHID PROCEDURE BCKUP AUTHID CURRENT USER AS statusmsg VARCHAR2 400
  • 如何连接mysql表

    我有一张这样的旧桌子 user gt id name address comments 现在我必须创建一个 别名 表 以允许某些用户出于某种原因拥有别名 我创建了一个新表 user alias 如下所示 user alias gt name
  • 如何合并两个 id 列,识别哪些行属于同一组相关 ID

    我有 2 个独立创建 收集的 ID 列 我试图通过根据两个 ID 列之一确定哪些行属于同一相关 id 组的一部分 从而将这两个 ID 列合并为一个 我会根据一些规则考虑行的相关性 1 如果一个LOAN在多行中具有相同的值 则它们属于同一组
  • 如何中止触发器中的多行插入

    使用 SQL Server 2005 我已经声明了一个触发 AFTER INSERT UPDATE 的触发器 在这个触发器中 我使用 WHILE 和 CURSOR 在 INSERTED 表的行上循环 当我发现一行不满足特定条件时 我希望触发
  • Sequelize 中的 FOR SHARE 和 FOR UPDATE 语句

    当我们使用事务时 常规 SQL 查询可以包含 SELECT FOR SHARE 和 SELECT FOR UPDATE 语句 有没有办法用 Sequelize 设置相同的语句 我还没有找到这些选项 也许有一些技巧 需要什么 您可以在这里阅读
  • 将不规则时间序列拆分为规则月平均值 - R

    为了确定季节性对能源使用的影响 我需要将计费数据库中的能源使用信息与每月温度进行调整 我正在使用一个计费数据集 其中包含不同长度以及开始日期和结束日期的账单 并且我希望获得每个月内每个帐户的月平均值 例如 我有一个计费数据库 具有以下特征
  • SQL Server 查询从字符串中删除最后一个单词

    SO 中已经有一个带有 MySQL 标签的问题的答案 因此 我决定让您的生活更轻松 并为 SQL Server 用户提供以下答案 总是很高兴看到不同的答案 也许会有更好的表现 快乐编码 SELECT SUBSTRING YourString
  • 数据库设计 - 何时拆分表?

    有时创建一个单独的表会产生更多工作 我是否应该将其拆分 例如 在我的项目中 我有一张客户表 每个客户对每种产品都有自己的特殊价格 只有5种产品 未来不会计划更多产品 每个客户也有一周中公司向他交付产品的独特日子 当日期和产品价格是客户表中的
  • 在每个条目一分钟内通过联系人查找 20 个或更多条目

    我们正在收集联系人及其访问的每个页面的一些分析数据 许多分析数据来自恶意攻击或机器人 因此它们在一分钟之内就访问了网站的 20 多个页面 我希望能够每天清除一次这些数据 但不知道如何编写一个 SQL 查询来选择该联系人在一分钟内访问超过 2
  • 如何将Excel文件导入到sql server 2008

    如何在不使用导入向导的情况下使用 sql 查询将 excel 文件导入到 sqlserver2008 Express Edition 中的新表中 谢谢 普拉迪 有一篇微软知识库文章列出了所有可能的方法 http support micros
  • Hibernate:单表中的父/子关系

    我几乎没有看到任何关于以下与 Hibernate 相关问题的提示 这涉及使用具有父子关系的单个数据库表来实现继承 与自身的关系 例如 CREATE TABLE Employee empId BIGINT NOT NULL AUTO INCR

随机推荐

  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • 准备好的语句需要 0 个参数,给定 1 个参数..,使用 php 手册示例 [重复]

    这个问题在这里已经有答案了 我直接从 php 手册示例中获取了这个 它几乎与我需要的相同 但我仍然收到此错误 有人可以告诉我我错过了什么吗 stmt link gt prepare SELECT obitBody Photo FROM tn
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 如何从intellij项目视图中隐藏不必要的文件?

    给定一个示例 gradle 项目 其项目结构如下所示 正如你所看到的 有很多东西你实际上不需要在想法中看到 但你需要它们存在 我知道下面被忽略的文件 文件夹类型Editor File Types但这些正在影响库和项目 idea 会在各处忽略
  • 为什么 ExpandableListView 更改 ChildView 设置(Android)?

    我对使用 ExpandableListView 有疑问 就我而言 我有两个组视图和两个子视图 而子视图由一个带有多个按钮 文本视图等的相对布局组成 例如 当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时 先前所做的更改也会自动应
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • AngularStrap 工具提示禁用我的自定义指令

    我正在尝试让 bs tooltip AngularStrap 指令与我自己的名为 checkStrength 的自定义指令一起使用 该指令检查密码的强度 单独使用这些指令中的任何一个时 它们都可以正常工作 但不能一起工作 This http
  • CSS 标签“object-fit:cover”不会在 Chrome 中裁剪/剪辑视频

    CSS tag object fit cover无法按预期在 Chrome 中剪辑 裁剪视频 这种情况仅适用于视频且仅在 Chrome 中发生 图像在 Chrome 中正常 在所有其他经过测试的浏览器中 图像和视频都工作正常 The beh
  • 当安装的 RPM 取代了另一个 RPM 时如何检测升级

    RPM scriptlet 被传入 1 https fedoraproject org wiki Packaging Scriptlets rd Packaging ScriptletSnippets Syntax 操作完成后 系统中将保留
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • Jquery Draggable 使输入文本字段不可编辑(吞噬 onfocus?)

    我编写了代码 如下 以便能够将输入字段拖动到另一个输入字段上 但似乎可拖动的吞咽input text onfocus 这会导致问题 所有可拖动的输入字段都被禁用 firefox 并且单击鼠标不会将它们聚焦 如果我使用 TAB 键关注输入字段
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • 我在 Rails 中使用了保留字吗?

    这是我的模型 class Record lt ActiveRecord Base belongs to user belongs to directory end class Directory lt ActiveRecord Base h
  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • 如何使用 Bochs 运行汇编代码?

    我想使用 Bochs 作为 8086 模拟器 是否有捷径可寻 我想要的是类似 emu8086 的东西 http www emu8086 com http www emu8086 com 如果程序的初始部分适合 512 字节 并且您不介意将自
  • JasperReports Server 参数依赖关系

    我有一份有两个输入参数的报告 两者都有一个保管箱 我可以在其中选择值 假设参数A 和参数B 是否可以使 ParameterB 依赖于 ParameterA 例如 如果我在 ParameterS 中选择汽车品牌 Honda 我应该只能看到 H
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合