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

sql-server - 如何创建引用复合主键中的一列的外键

我有两个表 Catalog 和 CatalogIndex

目录有以下列

其中 DN、PID 两列是该表的复合主键的一部分。

CatalogIndex 具有以下列

PID 和 PItem 是 CatalogIndex 表的复合主键的一部分。

我想在引用目录表中的 PID 的 PID 列上向 CatalogIndex 添加一个外键。

我正在使用 SQL Server 2008

谢谢

0 投票
3 回答
1538 浏览

.net - NHibernate - 如何将复合ID与父子引用映射

我有以下场景(为了更好地说明,示例非常简化) 数据库模型 BAS_COSTCODE 指的是 BAS_CONTEXT。此表的键是 COSTCODEID 和 CONTEXT_FK 的组合。CONTEXT_FK 指的是 BAS_CONTEXT。要构建分层树,CostCode 可以有一个父级。出于这个原因,有一个对表本身的引用。

Context 的架构文件是这样的:

CostCode 的架构是这样的:

如果我创建一个新的 CostCode 实体并运行 Commit(),我会得到以下异常: System.IndexOutOfRangeException:“此 SqlParameterCollection 的索引 13 无效,Count=13。”

我认为 NHibernate 的引用 ParentCostCode 有问题,它指的是父 CostCode 对象。NHIbernate 假定将值写入列 PARENTCOSTCODE_FK 和 CONTEXT_FK。在映射中,composite-id 指向 CONTEXT_FK,ParentCostCode 指向 CONTEXT_FK。因此它们“共享”同一列,NHibernate 应该只向 PARENTCOSTCODE_FK 列写入一个值。

一种解决方案是向表 BAS_COSTCODE 添加一个附加列(可能是 PARENTCONTEXT_FK)来表示父对象的上下文。但我不想有一个额外的列,因为如果存在对父对象的引用,则 CONTEXT_FK 和 PARENTCONTEXT_FK 的值必须具有相同的值。那将是多余的。

这类问题有更好的解决方案吗?或者我不能阻止 BAS_COSTCODE 中的附加列?

非常感谢您的回答!

0 投票
3 回答
14731 浏览

grails - 如何使用 GORM 创建复合主键?

我有三个域类:Beer、Review 和 Reviewer。

我希望 Review 表在 Beer 和 Reviewer 之间创建多对多关系,因此我希望 Review 的主键是 Beer 和 Reviewer 的 id 字段的组合。我正在关注这个 Grails 文档。

http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.5.2.5%20Composite%20Primary%20Keys

这是我的域类。

我遇到了编译错误,但是 stackoverflow 上的另一个答案说我需要添加implements Serializable. 这解决了错误,但是当我查看数据库时,我仍然没有得到复合主键。

这是我查看表定义时看到的内容。我正在使用 Postgres。

我很乐意只使用具有唯一约束的复合索引,但我也不知道如何做到这一点。我已经能够制作一个非唯一的复合索引,但这有两个问题。一,它是非唯一的。二、列在索引中按字母顺序指定(beer_id、reviewer_id)。我想指定索引中列的顺序。

0 投票
1 回答
4805 浏览

android - Android复合主键?

谁能告诉我如何在 Android 1.6 中声明一个包含自动增量 _id 列的复合主键?我不确定语法。当我尝试添加值时,我最终只是在 Java 中强制执行它(其中 registrationNumber + date 在表中必须是唯一的):

我真的不需要 _id 列,但如果表没有,它会使生活变得棘手。

干杯,巴里

0 投票
3 回答
325 浏览

database-design - 关于复合主键的问题

示例表:

假设idtenant_id在每个表上组成复合主键,这ticket_id是一个外键,Ticket这个设置会保护我免受 a TicketItemhastenant_id=1ticket_id=5 where the Ticketwith id=5has的情况tenant_id=2吗?简而言之,数据库是否允许我将 2 个表中的行(每个表都有不同的)链接tenant_id在一起,破坏我的数据,还是它可以保护我免受这种情况的影响?

另外,上面的例子看起来像是对复合主键的“好”使用吗?

0 投票
3 回答
1686 浏览

sql - sql server 2005 中的复合聚集索引和非聚集索引

我创建了一个具有复合主键的新表,可以说是 PrmID 和 Type,因此创建了一个新的复合聚集索引(首先是 PrmID)。我为 Type 添加了另一个非聚集索引。

我的问题是 - 当我生成对类型(例如 GROUP BY)执行任何语句的查询时,SQL 引擎是使用非聚集索引表还是 PK 聚集索引(对于那种查询来说更昂贵)?

0 投票
3 回答
793 浏览

mysql - 具有int和varchar字段的表的Mysql主键?

我有一个电影表,想存储替代标题。我会将替代标题/别名存储在另一个表中。我不确定什么是最好的主键。

我将有一个movie_id INT领域,一个alias varchar(255)领域。主键是否应该在两个字段上(因为一部电影可以有多个别名)?我是否应该为主键添加另一个字段,例如alias_id只是自动递增,但这没有其他用途。还是这个表需要主键?也许它应该只在别名上有一个唯一索引并且不需要主键?

0 投票
4 回答
289 浏览

sql - How can a table violate it's own primary key index?

I have a PostgreSQL database which has a table with the primary key applied to three columns. According to the database, there is an index on the key:

#xA;

Yet some simple tests reveal that I have duplicate keys:

#xA;

Clearly there are fewer distinct rows (based on the primary key) than there are rows. My question is, how is this possible?

Edit: The full table definition is such:

#xA;

For an example of duplicate rows:

#xA;
0 投票
3 回答
6440 浏览

eclipse - 为什么这个 JPA 2.0 映射在 Eclipse/JBoss Tools 中给我一个错误?

我有以下情况:( 来源:kawoolutions.com有效的 XHTML

JPA 2.0 映射(可能只考虑 Zip 和 ZipId 类就足够了,因为这似乎是错误的来源):

很简单的设计:

国家是一个地理区域,并从根类继承 ID。邮政编码在其国家/地区内是唯一的,因此它结合了 ISO 代码和实际邮政编码作为 PK。因此 Zips 引用了 Country.iso_code,它上面有一个替代的唯一非空键(引用非主键列!)。Zip.country 关联获得一个@Id 注释,其变量名称与其 ID 类 ZipId 中的变量名称相同。

但是,我从 Eclipse 中收到此错误消息(也使用 JBoss 工具):

验证消息:“与 ID 类属性 country 匹配的属性没有正确的 java.lang.String 类型”

  1. 为什么JPA 2.0语法中有此错误(请参阅 Zip.country 上的 @Id 注释)?我不认为它是。毕竟对于 JPA 2,Zip.country 和 ZipId.country 的所有类型不能相同,因为 @ManyToOne 上的 @Id 注释和 PK 是一个简单的整数,它成为 ID 类对应项。任何人都可以检查/确认这一点吗?
  2. 这可能是一个错误,可能在 JBoss 工具中吗?(哪个软件组件报告了上述错误?将 3 个表和实体类放入新的 JavaSE 项目时,没有显示错误的确切代码......)
0 投票
4 回答
3345 浏览

sql - 选择带有复合主键的刚刚插入的记录

我有一个带有复合主键的表,排列如下:

这两个列都是主键的一部分(它实际上是真实表上的 4 部分 PK,但为了示例,我已经对其进行了简化)。没有一列是身份。我正在编写一个存储过程,它在order_seq给定的下一个插入新记录some_id

我需要知道如何设置@newSeq。我想避免在插入后运行选择查询,因为我不想遇到并发问题——我被禁止锁定表或使用事务(不要问)。

据我所知,我不能使用SCOPE_IDENTITY(),因为没有一列是身份。如何newSeq正确设置?