问题标签 [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 回答
9309 浏览

sql - 将表主键列大小更改为 255

我有一个表,主键列大小设置为50。由于一些新的要求,我需要将大小增加到255。经过网上搜索,我了解到如果列是其中的一部分,则无法更改列主键约束。因此,我采取了删除约束、更改列并重新添加约束的方法。但是,我仍然遇到一个小问题,我的原始列是非 Null 类型并且设置了默认值,但是现在当我尝试以下 sql 时,我收到错误“默认语法附近不正确”

谢谢你的帮助。贾维德

0 投票
1 回答
2979 浏览

django - Django中一个关系的多个外键

我有两个这样的 django 模型:

如您所见,GradeValues 类中有 2 个主键,Review 中有 2 个外键。他们应该在 GradeValues 和 Review 之间建立一对多的关系。但它不起作用。这要怎么强求?我使用只读的 Oracle 数据库,所以我不能修改任何东西。

0 投票
1 回答
3987 浏览

hibernate - NaturalId,它是如何工作的?

我在使用 nativeid 时遇到问题,我不知道我是否做得对。

我有一个名为 Aircraft 的类,它有一个生成的 id。但它的本机 id 是序列号(整数)和模型(自定义类),如下所示:

我从 XML 加载这个类并保存到数据库中,如下所示:

它可以很好地插入,但我的问题是当我使用相同的信息再次执行此代码时,Hibernate 会插入另一架飞机。我希望 Hibernate 只更新当前的注册表。

我重写了方法 equals() 来测试 serialNumber 和 Model 属性,但它从未被调用。

我不知道如何让 Hibernate 理解具有 serialNumber 和模型的对象是 NativeId。

提前致谢!

亚历山大

0 投票
1 回答
140 浏览

ruby-on-rails-3 - 用于不使用 Rails 命名约定的现有数据库的 Rails 应用程序

我想为为 Java Web 应用程序编写的现有数据库编写 Rails 应用程序。主键不是 ActiveRecord 期望的自动递增“id”列,而是基于两个特定属性的多部分键。此外,外键不是使用 Rails 约定命名的,但是有一个外键语句将该字段引用到另一个表中的字段。我希望它可以与 Rails 模型方法一起使用,例如 :has_many 和 :belongs_to。

是否有一个自动工具可以读取现有模式并基于该模式生成 ActiveRecord 模型(尤其是我所描述的),还是我必须手动完成所有操作?

0 投票
4 回答
8916 浏览

mysql - Hibernate n:m extractHashCode 抛出 NullPointerException

使用休眠插入对象时出现以下异常。从数据库中读取就像一个魅力。我使用MySQL 5.5作为数据库提供程序和hibernate 3.6.5

我有以下数据库架构:

其中cell和location中的id是主键,servingCell、neighbourCell和location是cellatlocation中的复合主键。

我要插入的类:Cell.java

位置.java

CellAtLocation.java

最后是主键映射本身 CellAtLocationPk.java

0 投票
2 回答
633 浏览

c# - 如何使用组合框在 C# 中选择复杂/复合键?

我对 C#.NET (Visual Studio 2010) 有疑问。我在 SQL2005 express 中有 2 个数据表:

  1. 主键为“楼号”的楼,
  2. 和Aparatment,它的主键是“楼号”(楼表的外键)+“公寓号”。(公寓是建筑的弱实体,其关键是复合)。

这两个表都是我作为 DataSet 导入项目的更大数据库的一部分。我想在选择楼号和公寓号时显示公寓详细信息。建筑物编号设置在文本框中(其值始终是由不同控件选择的建筑物编号),我想要一个组合框仅显示文本框中建筑物具有的公寓编号,而不是表格中的所有公寓编号(这导致像 1, 2, 3, 1, 4, 5, 1, 2, ... (因为它选择所有行))。并非所有建筑物都共享相同的公寓编号或相同数量的公寓,我应该即时添加/更改/删除。

选择构建部分已完成并正在运行。我只是无法仅显示当前的建筑公寓(至少是我需要的公寓号码)。

我不想(更确切地说是不允许)使用数据网格。仅限“详细”控件。

我怎么做?我对 C# 几乎没有经验,也不知道如何使用 DataSets “最大限度地”工作。我想过可能会创建一个可以给我结果的视图,但我不知道如何导入视图并将建筑物编号设置为参数。也欢迎任何其他理智的方式。

请帮忙。

非常感谢,谢伊。

0 投票
1 回答
86 浏览

database - 是否有可能有一个不覆盖被引用表的整个主键的外键?

我有两张桌子:

表 A:具有复合主键。

表 B:参考表 A

如您所见,表B没有引用整个主键,但它肯定会始终引用表中的唯一条目,A因为指定使用的月份有一个全局值,将用于A.MonthSQL 查询。

现在我的问题是,这是允许的还是我违反了数据库设计的几条规则?

我真的很感激一个很好的答案,因为我将在我必须为我的学士学位写的最终文件中使用它。

提前非常感谢!

0 投票
3 回答
31968 浏览

hibernate - 休眠外键作为主键的一部分


我必须使用 hibernate 并且不太确定如何解决这个问题,我有 2 个具有 1..n 关系的表,如下所示:

我怎样才能用 Hibernate 管理这个???

我不知道如何管理第二个表的主键......

0 投票
2 回答
6098 浏览

php - MySQL + PHP:获取多个/复合主键的last_id

我需要获取具有多列主键的表的最后插入 id。

  • 这些表没有 AUTOCOUNT 列。
  • 我正在使用参数化查询(任意顺序)
  • 使用 PHP (5.3) 和 MySQLi 模块
  • 任意 INSERT SQL 查询。(任何格式)

例如:

结果: $last_id = $mysqli->insert_id ?: getInsertedId() ;

此时我有一个名为 getPK() 的函数,它返回给我:

我现在需要的是实现getInsertedId()。在不使用 SQL 解析器的情况下,这可能是最简单的方法?

我很确定这个问题已经有了答案,但我找不到任何东西......

更新

我问这个问题的原因是因为我有一个类可以控制与 MySQL 数据库相关的所有内容(个人框架的一部分)。我有一种称为set()的方法,其中传递了查询(如 UPDATE、INSERT、DELETE 等)。我还有其他特定的方法,例如insert(),其中传递了数组。

我有一个存储last_inserted_id 的变量。以后可以随时调用该变量。我在具有多个主键的不同系统中有许多表。使用insert()方法时,设置 last_inserted_id 值没有问题,但是当某些系统使用set()方法时,我无法检索该值,我必须返回 0。我想更改该行为。

我想用上面的例子来简化我的解释。

更新 2

并非所有系统都由我自己控制。例如,其中一个系统调用soap 方法,在该方法中发送查询以执行(任何类型的查询)。这些由set()方法处理。然后还有其他soap方法可以检索最后一个id。为了保持一致性,我想返回该值。

0 投票
1 回答
2030 浏览

entity-framework - 实体框架 - 具有复合主键的对象

我正在使用 Entity Framework 4,并且我最近将对象的主键之一更改为包含 2 列而不是 1(它曾经只有它的 id - Guid - 现在它有一个 id 和一个版本 - int) .

当我尝试创建另一个具有相同 ID 但版本不同的对象时,出现以下异常:

对数据库的更改已成功提交,但在更新对象上下文时出错。ObjectContext 可能处于不一致的状态。内部异常消息:AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。

我查看了数据库,我确实有 2 个具有相同 id 但具有不同版本的对象,就像我想要的那样。

如何让 EF 配合这些设置?

edmx 文件中的实体设置:

我将提供任何其他需要的代码部分。

编辑:
表定义:
桌子

guid 在应用程序中设置。

编辑 2:
我的数据库中有 2 个这样的对象用于测试。我刚刚看到,在查看上下文的 Tests 集合时,其中一个重复了两次,而不是有 2 个不同的对象(具有不同的版本和日期)。