问题标签 [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.
sql - WHERE col1,col2 IN (...) [使用复合主键的 SQL 子查询]
给定一个foo
具有复合主键的表(a,b)
,是否有用于编写查询的合法语法,例如:
如果这是不可能的,并且您无法修改架构,那么您如何执行与上述等效的操作?
我还将在此处放置术语“复合主键”、“子选择”、“子选择”和“子查询”,以查找这些别名的搜索命中。
编辑:我对标准 SQL 的答案以及适用于 PostgreSQL 和 SQLite 3 的答案感兴趣。
hibernate - JPA OneToOne 关联,其中 2 个实体使用复合主键但使用不同的列名?
我们正在尝试将 Hibernate 与使用大量复合键的数据库一起使用,这让我们很头疼。不幸的是,我们不能改变模式,所以我们必须在我们的字段之间做很多额外的映射。我们仅限于使用 JPA 1.0 和 Hibernate 3.3。
到目前为止,我们遇到的最大问题是使用 2 个值的复合键来处理两个实体之间的一对一关联,其中表对这些列具有不同的名称(数据库的命名约定是每列上的特定于表的前缀。)
每当我们执行查询时,我们都会得到这个异常:
这些表的两个类 InvestorIssuerEntity 和 InvestorIssuerEmailEntity 有一个可选的 @OneToOne 关联(在某些情况下 InvestorIssuer 在 InvestorIssuerEmail 中没有匹配的记录):
我试图通过对两个实体使用与@EmbeddableId 相同的类,然后使用@AttributeOverrides 来解决类型不匹配问题,如下所示:
不过,我只对这两个实体进行了更改,仍然对其他实体使用 @IdClass 方法(是否仅对您的实体使用 @IdClass 或 @EmbeddableId,而不是两者?)
我们最终遇到了其他问题,例如“实体映射中的重复列”,因此我们恢复了这种方法,看看是否有其他解决方法。
有没有人有任何解决方案来解决这个问题?我查看了 StackOverflow,但没有遇到任何关联中使用的复合键具有不同名称的情况。
注意: 即使尝试了以下建议,我们仍然会收到此错误:org.hibernate.MappingException: Repeated column in mapping for entity: com.business.entity.InvestorIssuerEntity column: T090_091_INVESTOR_ID (应该使用 insert="false" update= 进行映射“错误的”)
我什至从 InvestorIssuerEntity 中删除了所有关联,但仍然遇到同样的问题。仅当我删除复合键类中的 @Column 注释时,该错误才消失。当然,查询不起作用,因为没有映射investorId!我不明白Hibernate 在哪里找到“映射中的重复列”,因为除了复合键之外,我已经删除了 T090_091_INVESTOR_ID 的所有提及。
我们在 InvestorIssuerEntity 中有其他关联,它们对相同的主键进行连接,但关联的实体在其复合键中也有额外的列。使用 @EmbeddedId 后,是否应该将它们用于所有实体?对于其他类,我们仍然使用 @IdClass。但是,这如何在任何地方导致“重复列”?
c# - 具有多个外键问题的 Linq-To-SQL 关联
我正在使用 Visual Studio 2008、C#、LINQ to SQL,并使用 datbase dbml GUI 编辑器来创建数据库。我想创建一个一对多的关系,但在我的例子中,1 个对象有 2 个主键。使用 GUI edtior 我创建了关联,但是当程序运行并创建数据库时,我收到错误:
“引用的表必须有一个主键或候选键。[FK Name = Screen_Pixel]”
在 dbml 中创建的 XML 如下所示:
在 C# 代码中生成的关联是:
有任何想法吗?
database-design - 复合主键与否?
这就是让我感到困惑的地方。我经常在数据库表中有复合主键。这种方法的不好的一面是,当我删除或编辑条目时,我有很多额外的工作。但是,我觉得这种方法是本着数据库设计的精神。
另一方面,我的一些朋友从不使用复合键,而是在表中引入另一个“id”列,所有其他键都只是 FK。在编写删除和编辑程序时,他们的工作量要少得多。但是,我不知道它们如何保持数据条目的唯一性。
例如:
方式 1
方式二
哪种方式更好?使用第二种方法有什么不好的方面?有什么建议么?
sql - 什么查询创建一个触发器来生成具有两个 fk 的复合主键?
我正在尝试编写一个命令来创建一个生成复合主键的触发器。这个pk又是基于两个fk。
我将编写更具体的示例表。
(我正在处理的表)
(参考表)
到目前为止我的查询
编辑:所以这个问题背后的想法是会有一个单独的列,其中包含组成复合键的两个键的串联。一位朋友告诉我这是错误的,您只需将两个字段都设置为 pk 就是这样。这是真的?
sql - SQL - 这种关系可以有一个主键吗?
乐队和成员之间的关系,'MemberOf',包括成员id(Mid)、乐队id(Bid)、'StartYear'、'EndYear'和'Instrument'。Mid 和 Bid 分别是 Member 和 Band 关系的外键,但在这种情况下,我很难确定“MemberOf”关系的主键。
注意:如果成员从开始就在乐队中,则开始年份可以为空,如果成员仍在乐队中,则结束年份也可以为空。
在这种情况下,开始和结束年份不能用作 PK,因为它们可能包含空值,但成员 id 和乐队 id 的信息不足以成为唯一的 - 例如,同一成员在以后返回同一乐队。
这是否意味着不存在主键?谢谢。
mysql - Mysql 选择 PRIMARY key = x 的记录
我的 mysql 表中有一个主键,它由三列组成。
是否有一种速记方法来选择主键的给定值的记录。
我试过了。
而不是长手的做法,
处理表中的 php 和复合键时的标准是什么。注意:我不想在我的表中添加自动递增键来解决这个问题。如果不可能,那么我将在我的 url 中传递三个约束。
mysql - Hibernate 不填充 AUTO_INCREMENT 列作为复合 PK、错误或反功能的一部分?
我发现 Hibernate 和复合键存在问题,其中一个列自动递增。
我正在使用 MySQL 和由 2 列 GID 和 LANG 组成的主键。GID 列设置为 AUTO_INCREMENT。插入工作,休眠插入新行,当 GID 为空时 MySQL 添加 auto_generated id。但是,Hibernate 不会将给定对象中的 GID 字段设置为持久。
我听说过通常与使用hibernate的复合主键有关的问题,所以我问这是hibernate中的一个错误,还是开发人员预谋留下的反功能(因为没有实现,所以不会实现)?
ruby-on-rails - Rails 中的composite_primary_key Gem 的问题
我正在使用 drnic 的复合主键 gem,但遇到了问题:如果我想在测试中使用以下命令创建 CourseOrder(有一个 cpk):course_order = CourseOrder.new(:daily_order => daily_orders(:daily_order_one_of_today_for_hans),:course => courses(:non_veg_2), :finished => false, :ordered_at => Time.now)
我将收到以下错误:
ActiveRecord::StatementInvalid:PGError:错误:“course_iddaily_order_id”列中的空值违反非空约束:插入“course_orders”(“course_iddaily_order_id”、“course_id”、“ordered_at”、“finished”、“daily_order_id”)值( NULL, 489519433, '2011-03-01 10:19:27.169397', 'f', 594369222) 返回 "course_iddaily_order_id"
我认为有一个 course_iddaily_order_id 是错误的,不是吗?
我的迁移文件如下所示:
生成的架构部分如下所示:
我的模型如下所示:
我不知道这里出了什么问题,你能帮忙吗?
sqlite - SQLite - 使用复合主键并自动递增两列
我有下表:
我希望列 'id' 在新行上为 null 时自动递增,我还希望列 'version' 设置为 1。
我想将自动增量值存储在 sqlite_sequence 中。
当使用 'id' 插入一行时,我希望 'version' 增加 1。
我已经在应用程序级别复制了它,但我在数据库级别需要它,我知道我必须创建一个或两个触发器。
谢谢
更新:
这只是对文档进行版本控制的一种模式,它可能不是最好的,也可能不安全。有没有人认为这有什么问题或更好的实施方法?
更新 2:
我添加了一个“当前”列来跟踪当前版本。
更新时,我添加了一个查询以提取该 id 的最高版本,然后添加 1。
我还添加了另一个触发器来防止更新任何非当前版本。
我已经得到了这个工作: