问题标签 [compound-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
767 浏览

jpa - JPA - 多对多表中的复合键与生成的 id

我正在创建一种社交网络,并且我的用户可以关注其他用户。所以我有一个像这样的实体:

我不能有 ManyToMany 关系,因为我的 FollowedUser 实体中有更多字段。现在,我的问题是:

  1. 我应该使用复合键还是生成的 id(代理键)?我已阅读以下链接(123)关于建议使用代理键的主题,但我不知道它们是否适用于我的具体案例(我的复合键将由两个代理外键组成) . 同样在这里(4)它说“复合主键通常在从遗留数据库映射时出现”,所以我认为他们不鼓励。
  2. 如果我应该使用复合键,我不知道是否应该使用 @IdClass (这里推荐5)或 @EmbeddedId (这里推荐6)或任何其他选项。虽然我觉得没关系。
  3. 如果我应该使用代理键,我不知道如何仍然无法重复复合候选键。我在这里 ( 7 ) 阅读了有关唯一索引的信息,但我不知道这是否是解决该问题的正确方法。
0 投票
1 回答
217 浏览

r - 基于复合字段表达式聚合每小时均值

我正在尝试计算x与此类似的数据框中的每小时平均值:

我用这个aggregate功能尝试了不同的东西,但没有运气。所以我想要的是计算, , ,x的值是否相同的平均值。输出应如下所示:hourdaymonthyear

0 投票
1 回答
78 浏览

mysql - MySQL 复合主键的问题

我对使用复合主键的表有疑问。密钥由一个日期和一个 bigint 组成。

即使仅从 PK 中选择字段并使用包含两列的 where 子句,表上的选择看起来也正在扫描。例如

解释使用 where 和考虑的行数以百万为单位的选择显示。

一个奇怪的地方是 key_len,它显示为 7,看起来太小了。

我的直觉说钥匙坏了,但我可能遗漏了一些明显的东西。

有什么想法吗?

谢谢

理查德

0 投票
1 回答
46 浏览

grails - 复合键逆向工程 grails pulgin 问题

我有这张桌子:

当我应用反向 eng grails 插件grails db-reverse-engineer时,我收到此错误:

方法 public java.lang.String grails.plugin.reveng.GrailsEntityPOJOClass.renderConstraints() 在实体上调用时抛出异常:abdennour.DocumentsRevisions

但是,没有 pb 与其他 Db 表。事实上,逆向工程可以很好地处理这些表格。

因此,我注意到这个插件有复合键的问题。

请注意,这是一个复合 UNIQUE 键,它不是复合 PRIMARY 键

0 投票
1 回答
2116 浏览

java - 具有外键和枚举的 JPA 复合键

大家好,

我试图从遗留数据库中构建所有 jpa 实体。我有一个反复出现的问题:一些“主要”实体有一个“翻译”集合,其中主键是“主要”+“语言”标识符的键。语言存储在数据库和枚举中,以方便处理。

我使用的 JPA 实现是 Hibernate 4。

以下是当前的实现:

主要:(留言)

翻译:(MessageDesc)

翻译复合键:(MessageDescPK)

语言:(LanguageEnum)

问题是,当尝试在描述上保留带有一些翻译的主(消息)实体以及设置了语言和消息的翻译时,我不断收到以下异常:

我不明白为什么在 messageDesc 实例上设置语言和消息(已经持久化)后 PK 为空。任何帮助,评论,线索将不胜感激。

谢谢!

0 投票
1 回答
109 浏览

sql-server - SQL Server:数据库设计 - 复合主键

我需要你关于如何实现 SQL Server 表关系的建议。

  1. 我有很多客户,每个客户都有一个唯一的 id ( customerID)

  2. 每个客户可以关联多个类别 ( categoryID)

  3. 每个客户可以有许多子类别 ( subCategoryID)

  4. 当客户登录时,我知道它的CustomerID,CategoryIDSubCategoryID.

  5. 客户提前计划来年每周工作多少小时(2014 年 12 月计划 2015 年 52 周)

  6. 每天,客户都会报告他们是否工作或休假。

我想有一个名为WeeklyPlanning列的表:

和另一个DailyWorkingHours用列调用的表:

我的问题:

我不知道如何将这两个表组合在一起,使用复合键?( CustomerID, CategoryID, SubCategoryID, Year, WeekNumber) 或者可能生成一个独特的 PKWeeklyPlanning将用作 FK DailyWorkingHours

我正在寻找实现这一点的最佳方法。

谢谢

0 投票
0 回答
51 浏览

java - 如何将休眠 OneToMany 关系注释到具有复合 ID 的表?

我正在尝试在目标表具有复合 ID 的两个表之间创建 OneToMany 关系。复合 id 的一列是我想要键入的那一列,但我无法弄清楚。示例表:

EXCHANGE_RATE 表有多个具有给定 CURRENCY_ID 的行,但 CURRENCY_ID 和 YEAR 的组合始终是唯一的。因此,我在 EXCHANGE_RATE 上定义了一个复合 id,其中包括 CURRENCY_ID 和 YEAR。

但是 PRICE 表中的 fk CURRENCY_ID 仅映射到 EXCHANGE_RATE 表的 CURRENCY_ID 列。我已经尝试了所有我能想到的将 PRICE 对象映射到 EXCHANGE_RATE 对象并且不能正确。这是我在 Price.java 类中的注释示例:

我还尝试了以下注释:

省略referencedColumnName:

使用前面带有 ID_ 的 referencedColumnName:

使用带 ID 的 referencedColumnName。前置:

有谁知道如何使这项工作?提前致谢。

0 投票
6 回答
9000 浏览

sql-server - 在联结表中,我应该使用主键和唯一约束,还是复合/复合键?

我已经阅读了一些似乎使这个问题重复的内容。但通读所有这些让我不确定。我希望根据下面的绝对示例得到答案,因为许多问题/答案在来回辩论中逐渐消失。

如果我有:

现在,对于简单的连接表,我有两种选择:

以上将是两个 FK 上的复合/复合键,以及为两列设置 FK 关系 - 在删除时也使用 Cascade。

或者

BookID 和 AuthorID 上的外键关系,以及删除时的 Cascade。还要对 BookID 和 AuthorID 设置唯一约束。

我正在寻找一个简单的答案,说明为什么在上面的特定示例中一种方法比另一种方法更好。我正在阅读的答案非常详细,我正要确定一个复合键,但随后观看了一个视频,该示例使用了我的第一个示例一样的身份列。

似乎这个话题被撕成了两半,但我的直觉告诉我应该只使用复合键。

什么查询效率更高?似乎有一个 PK 标识列以及在两列上设置唯一约束,并且 FK 关系的成本会更高,即使是一点点。

0 投票
4 回答
5876 浏览

r - 按天和小时获取数据的总和

以下是我拥有的数据的示例。

我想做的是总结每小时文件的大小。

我想要一个如下所示的结果数据表:

依此类推。

但我似乎无法获得所需的输出。

我试过 ddply 和聚合,但我总结了一整天,我不知道如何在时间列中按小时分解。

而且我有好几天的数据。因此,它不仅限于那一天。从那天开始,几乎每天都到昨天。

谢谢!

0 投票
1 回答
158 浏览

cassandra - Cassandra 集群密钥使用

我正在努力解决这个问题,但坦率地说,我的大脑无法理解——至少看起来是这样。

我有一个专栏家族,为相当多的演员工作。它是一个中央作业管理和调度表,必须在整个集群中分布和可用,甚至可能在不久的将来的某一天穿越数据中心的障碍。

每个作业执行器参与者系统,即实际执行作业的系统,都安装在一个 Cassandra 节点旁边 - 即在同一个节点上。实际上,当然有 s 主演员拉动工作并将它们分配给演员代理,但这与我的问题无关。

还有一些参与者系统可以在中央作业表中创建作业以供其他参与者甚至参与者系统执行,但通常这些作业是批量加载或通过 Web 界面手动加载的。

要执行作业的参与者总是只查询它的本地 cassandra 节点。如果完成,它将更新作业表以指示它已完成。在正常情况下,此写入也应该只更新具有他的本地 Cassandra 节点具有权威性的作业的记录。

现在,有时可能会发生给定主机上的参与者系统无关的情况。在这种情况下,它确实也应该从其他节点获得作业,但当然它仍然只会与它的本地 Cassandra 节点对话。我知道这行得通,它并没有打扰我。

让我彻夜难眠的是:

我将如何创建一个复合键来实现 Cassandra 节点的本地权威,以获取其本地参与者系统的作业条目,从而实现它的作业执行参与者,而无需将作业表拆分为多个列族等?

换句话说:我如何创建一个复合键,以确保 a)作业在我的集群中均匀分布,b)作业表上的本地查询仅返回此 Cassandra 节点对其具有权威性的作业,以及 c)我的分布式代理系统仍然有可能从其他节点获取作业,以防它没有自己的作业可以执行???

关于上面 c) 的最后一句话。在没有本地工作的情况下,我不想做 2 次查询,但仍然只有 on!

对此有任何提示吗?

到目前为止,这是作业表的一般结构:

仍在设置所有内容的过程中,因此到目前为止没有定义查询。但是演员会从中拉出工作并设置状态等