问题标签 [composite-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 投票
0 回答
774 浏览

oracle - Hibernate MapKeyManyToMany 给出不存在的复合键

我有一个使用三向连接表的地图的休眠(3.3.1)映射:

基础表(在 Oracle 11g 中)是:

键实体曾经在数据库中具有三列主键,但现在重新定义为:

此表有一个主键“Id”和外键约束+其他每个列的索引:

出于某种原因,Hibernate 认为地图的键是复合的,即使它不是,并给我这个错误:

org.hibernate.MappingException:外键 (FK1A241BE195C69C8:SiteConfig_InstConfig [SiteTypeInstallationId])) 必须具有与引用的主键相同的列数 (SiteTypeInstallation [SiteTypeId,InstallationRoleId])

如果我删除注释installationConfigurations并使其瞬态,错误就会消失。

我很困惑为什么当@Id 明确定义一个简单的键时它认为 SiteTypeInstallation 有一个复合键,并且双重困惑为什么它只选择这两个列。知道为什么会这样吗?JBoss (5.0 EAP) + Hibernate 是否有可能在服务器重新启动和代码重新部署时以某种方式记住主键的错误想法?

在此先感谢,-拉尔斯

0 投票
2 回答
346 浏览

.net - 是否可以有一个可以在 NHibernate 中编辑的复合 ID?

我有一种情况,我有许多列用作复合主键的表,

更糟糕的业务逻辑要求这些是可变的。

我正在使用 nhibernate 并且映射加载/保存这些没有问题。但是,当我调用更新时,我需要能够更新属性值并让这些更改反映在数据库中。

这是一个遗留系统,所以数据库结构没有变化(太可怕了)。

我可以用 nhibernate 做些什么来解决这个问题吗?nhibernate 甚至允许修改其密钥。

我正在使用:.net4.0、nhibernate 2.1、fluentnh 1.0 和 sql server 作为后端。

0 投票
5 回答
852 浏览

sql-server - 如何有效地计算按另一列排序的一列的 MAX?

我有一个类似于以下(简化)的表模式:

在这里提供一些背景知识,这个事务表实际上是合并了来自另一个供应商数据库的几种不同类型的事务(我们将其称为 ETL 过程),因此我对他们被插入。即使我这样做了,交易也可能是回溯的,所以这里要注意的重要一点是,任何给定的最大值不一定是最近的交易。TransactionIDcustomer

事实上,最近的交易是日期ID 的组合。日期不是唯一的 - 供应商经常截断一天中的时间 - 所以要获得最近的交易,我必须首先找到最近的日期,然后找到该日期的最新 ID。

我知道我可以使用窗口查询ROW_NUMBER() OVER (PARTITION BY TransactionDate DESC, TransactionID DESC)(一直写下去也很尴尬。

稍微高效的是使用两个 CTE 或嵌套子查询,一个用于查找MAX(TransactionDate)per CustomerID,另一个用于查找MAX(TransactionID). 再次,它可以工作,但需要第二次聚合和连接,这比查询稍好,ROW_NUMBER()但在性能方面仍然相当痛苦。

我也考虑过使用 CLR 用户定义的聚合,如果有必要,我会依赖它,但如果可能的话,我更愿意找到一个纯 SQL 解决方案来简化部署(在此其他任何地方都不需要 SQL-CLR项目)。

所以这个问题,具体来说是:

是否可以编写一个查询来返回最新 TransactionID的per CustomerID,定义为TransactionID最近的最大值TransactionDate,并实现与普通MAX/GROUP BY查询等效的计划?

(换句话说,计划中唯一重要的步骤应该是索引扫描和流聚合。多次扫描、排序、连接等可能太慢了。)

0 投票
5 回答
1683 浏览

database-design - 规范化更好还是复合主键更好?

我在 Oracle DB 中有一个表,比如 Student 表。StudentID 是表中的主键。我有另一列感兴趣的科目,比如列名是 Interest_SUB。一个学生可以有多个感兴趣的科目。在这种情况下,我有以下 2 个选项:

1) 将 StudentID 和 Interested_SUB 列作为复合主键。在这种情况下,例如,如果学生对 3 个科目感兴趣,那么我将在表中有 3 行,其中 (S1,SUB1) (S1,SUB2) 和 (S1,SUB3) 作为列值,所有其他列将具有相同这三行的值。

2) 有一个单独的表,其中包含 StudentId 和 Interested_SUB 列以及第一个表中的附加列,以指示学生是否对多个主题感兴趣。在这种情况下,我将为学生表中的每个学生设置一行,其中 studentId 和 SUB 为 (S1,SUB1),并且新的指示符列为“Y”。在第二个表 (S1,SUB2) & (S1,SUB3) 中。

请建议我上述哪个选项可以提高数据库的性能。

提前致谢

0 投票
1 回答
2194 浏览

c# - 实体框架 CTP4 和复合键

我正在使用 EntityFramework CTP4 并决定将其应用于我当前的项目之一。该应用程序使用 SQLServer 数据库,并且有一个带有复合键的表。比如说,表“MyEntity”具有“Key1”和“Key2”作为外键(单独)和复合主键。

我做了一个从 EntityConfiguration 派生的配置类:

然后在我的 DataContext(派生自 DbContext)中:

问题是,当我查询“MyEntities”的所有记录时:

我得到了一个非常奇怪的结果,其中第一条记录重复了 18 次,然后第二条记录重复了 18 次(对于记录,我的表有 36 条记录)。

我怀疑问题出在复合键上,因为没有其他实体显示此问题。

任何帮助将不胜感激,谢谢:)

0 投票
1 回答
748 浏览

java - Hibernate:使用复合键的对象和实体身份映射的策略/模式?

为任何类型(原子类型)多列主键生成哈希码的一般无冲突 Java 最佳实践是什么?

我考虑了几个小时并得出结论,由所有主键列连接的字符串将是唯一可靠的方法。然后在该连接字符串上调用 Java 的 hashCode 方法应该会产生一个唯一的整数。(实际上它会以某种方式模仿数据库索引的作用,但这里不确定)

对于表单的多列主键

哈希码可以这样计算:

当然,这仅适用于 HashSets 和 Hashtable 当 equals 也基于此。

我的问题:这是一个好的总体策略吗?

我可以看到即时计算可能不是最快的。您可能希望在复合键值更改时重新计算哈希码(例如,从每个对键属性进行操作的 setter 中调用 rehash() 方法。

欢迎提出建议和改进。没有任何众所周知的策略吗?一种模式?

0 投票
4 回答
5552 浏览

sql - 如何在多列上创建复合键

如何在多个列上创建复合键,其中一个可以有一些值但不能为空(或一些常量值)?

例如:

插入第四条记录应引发复合键违规错误。

0 投票
4 回答
724 浏览

sql - SQL Server 复合键体验

我想在 Documents 表上创建一个复合键(这就是想法,但我愿意接受其他建议)。它将由两列组成,年份 (2010,...) 和一个 ID,这将是自动递增的,但它应该每年重新启动。

因此,像 2010-1、2010-2、...、2011-1、2011-2 等这样的键,最好也应该用于显示、打印和搜索。

虽然我不相信自动增量会起作用,但由于每年都会重置,所以我想我必须自己进行增量,不是吗?

还是我应该只创建一个 varchar 列并自己构建每个键,然后在该列上放置一个唯一的?

那么,我有哪些选择?

还请考虑我在选择的设计中可能遇到的未来设计问题,无论它是什么以及易于查询。

更新:

我真的开始考虑让应用程序构造密钥并在插入时提供它。但是,它需要在数据库中查找最后发布的 ID,这可能会导致大量使用的问题。

0 投票
2 回答
27564 浏览

nhibernate - 使用 NHibernate 的复合键/ID 映射

我的数据库中有以下表格:

通常我会使用多对多关系映射“AnnouncementsRead”,但该表还有一个额外的“DateRead”字段。

到目前为止,我已经定义了以下实体:

使用以下映射:

但是,当我运行它时,我收到以下错误:

如果有人能指出我正确的方向,我将不胜感激。谢谢

0 投票
3 回答
2988 浏览

validation - 复合唯一索引(非主索引)的验证规则

我确信我不是第一个在表中拥有复合唯一键并且想要验证它们的人。我不想发明自行车,所以我先在这里问。我有几个表,其中有 'id' 列作为主键,另外两列作为唯一的复合键。最好有一个验证规则来检查提交的条目是否唯一,如果不是则显示验证错误。在 Cakephp 中,它可以通过自定义验证规则来完成。我很确定有人已经创建了这样的方法。

理想情况下,它应该是 app_model.php 中的一个方法,可以被不同的模型使用。