问题标签 [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 投票
1 回答
1002 浏览

mysql - 将 MyISAM 转换为 InnoDB,其中表具有两列(复合)PK,其中之一是自动增量

我想将我们的一些 MyISAM 表转换为 InnoDB,以便我可以利用外键支持。但是,大多数表都使用两列(复合)主键设计,其中一个列是自增列(这是出于历史原因这样做,并且还确保自增列可以充当一种其他列值上下文中记录的增量键)

我意识到我们需要取消多列主键才能使用自动增量和 InnoDB。我们有数千条记录,这些记录与其他表有关系。

有没有关于如何将这些表转换为 InnoDB 的提示?我想出的唯一方法是首先在每个表中添加一个新列,将其设置为唯一的自动增量主键,然后使用脚本更新依赖表以指向新的(真正唯一的)主键.

谢谢史蒂夫

0 投票
1 回答
202 浏览

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 是错误的,不是吗?

我的迁移文件如下所示:

生成的架构部分如下所示:

我的模型如下所示:

我不知道这里出了什么问题,你能帮忙吗?

0 投票
1 回答
1704 浏览

hibernate - 条件联接在复合表上不起作用

我无法通过在复合可嵌入键表上的选择在一次调用中检索这两个属性。我先抓计数,然后分页。整个站点的其他地方都在使用相同的逻辑。我在查询中收到以下错误。在这里真的迷路了。

java.sql.SQLSyntaxErrorException: ORA-00904: "U3_"."ID": 无效标识符

用户徽章.java

0 投票
2 回答
2888 浏览

java - 复合主键 Hibernate 和 Java 实现

我定义了一个非常简单的数据库,如下所示:

MySql 简单数据库

我正在使用hibernate 插件来生成不同的类,包括客户和订单之间的一对多关系。我将此关系作为识别关系,因为如果不链接到客户,订单就无法存在。

我有以下三个课程:

=> 类客户

=> 班级顺序:

=> 类 OrderId

然后我有我的主要课程:

请注意,我的 DAO 对象没有做任何花哨的事情......只是获取会话的常用 HibernateUtil 实现,最后调用“保存”方法。我的问题如下。我以前从未处理过复合键...请原谅我的愚蠢问题。我不想手动处理不同的 id 和主键。对于 Cutomer 类,这不是问题,因为我设置了一个策略,在保存到数据库时会自动创建 id。对于 Order 类,我也不想处理这个问题。但是由于密钥是复合的,Hibernate 在尝试将此对象保存在 DB 中时会生成一个 identifierGenerationExeption ...我想要的是以下 => 自动生成的订单 ID,因为我在订单对象中设置了客户,

谢谢

0 投票
1 回答
1603 浏览

entity-framework - 我可以让实体框架(模型优先)生成复合键吗?

我正在使用实体框架的“模型优先”方法设计数据库。根据我在这里收到的优秀反馈,我正在为部分数据库采用超类型/子类型模式。

此模式需要基于至少 2 个表中的 2 列的复合键(请参见下面的架构)。

我在论坛中搜索了“实体框架”和“复合键”,但我发现的问题都不是这个更基本的问题:我可以设置一个实体模型以便它生成一个表(使用“生成数据库来自 Model...") 在 2 列上具有复合主键,这样一个是第二个表上的外键?而在另一个表上,除了 FK 之外的情况是基于第一个表中的 2 列?

或者,让 EF 生成不带复合键的 DB,然后进入 SQL Server,(重新)设置主键,删除模型,并基于新实例化的数据库创建新模型会更好吗?我当然知道该怎么做;但由于我仍在处理 DB 结构中的一个或 2 个小细节,我宁愿推迟任何本质上会导致 DB 结构烘焙的事情。

这是推荐的超类型/子类型结构,我已经在我的实体模型中进行了镜像(还没有弄清楚如何生成复合键):

0 投票
1 回答
2043 浏览

nhibernate - Nhibernate复合键问题

我有一个名为 person_skills 的表,如下所示:

person_id、skill_type_id、base_score、misc_score

有一个查找表,其中包含 id、skill_types 的名称。

现在棘手的是我有一个用于 person_id,skill_type_id 的复合键。由于一个人可能有 5 种技能,因此该表中将有许多条目。

目前我有这样的课程:

然后我有一个类来包含所有这些,如下所示:

现在我不确定这是否是处理这种关系的最佳方式,最终我需要能够给人们一个技能链接,一个人有很多技能。

我正在考虑只是放入一个自动增量 id 列并将其用作 PK,但这似乎并不理想。如果需要,我可以更改模型和数据库,但由于这是在页面的 ajax 部分中使用的,因此我需要能够更改技能,然后将它们更新到数据库中。

0 投票
3 回答
93565 浏览

c# - 复合键作为外键

我在 MVC 3 应用程序中使用实体框架 4.1。我有一个实体,我的主键由两列(复合键)组成。这在另一个实体中用作外键。如何建立关系?在正常的 scnerios 中,我们使用:

但是如果类别有两列键怎么办?

0 投票
2 回答
51890 浏览

ef-code-first - EF 4.1 代码优先的复合键

我试图弄清楚如何使用 EF 代码 First 4.1 RC 来获得复合键。

目前,我正在使用 [Key] Data Annotation,但我无法指定多个键。

如何指定一个复合键?

这是我的例子:

我需要“ActivityName”也是一个键。当然,我可以围绕这个进行编码,但这不是好的数据库设计。

0 投票
1 回答
432 浏览

linq-to-sql - Linq2SQL 数据库设计:映射复合/代理键

我有一个巨大的数据库,它存储来自不同数据源(如两个不同论坛)的线程和帖子。对于每个数据源,实体的 ID(例如 ThreadId、PostId...)是唯一的,但它可能与另一个数据源获得的实体的 Id 冲突。例如,forum1 和 forum2 都可以有一个 Threadid=1 的线程:

我正在使用 Linq2Sql 和存储库模式将我的应用程序连接到数据库。我读到使用 Linq2Sql 时应避免使用复合键(在 ThreadId 和 DatasourceId 之间)。因此,我想代理主键是我唯一的选择(是吗?):

表线程:

  • UniqueId - 整数,PK
  • DatasourceId - 整数
  • ThreadId - 整数
  • ...

表帖:

  • UniqueId - 整数,PK
  • DatasourceId - 整数
  • PostId - 整数
  • ThreadId - int,FK 到 Threads.ThreadId

现在,我的问题是:Linq2Sql 是否能够在其生成的类中映射帖子和线程之间的 1:1 关系?如果帖子具有 Thread.ThreadId 的外键并且有两个实体具有相同的 ThreadId(当然是不同的 DatasourceId),会发生什么?我想这将在帖子上返回一组分配的线程 - 我不想要!我还能以某种方式为每个帖子返回一个共享相同 DatasourceId 的帖子吗?

0 投票
6 回答
82616 浏览

sql - 候选键和复合键有什么区别?

我正在阅读有关候选键和复合键的信息。我才知道

  • 候选键可以作为主键,它可以是单个列或列组合
  • 复合键也是列的组合。

对于复合键,我参考了这个链接

如何使用 SQL Server Management Studio 创建复合键?

因此,当候选键和组合键都是列的组合时,它们可以作为主键。那么确切的区别是什么?你能用例子解释一下吗?