问题标签 [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.
mysql - 如何正确创建复合主键 - MYSQL
这是我正在使用的密集设置的严重过度简化。table_1
并且table_2
两者都具有自动增量代理主键作为 ID。info
是一个包含关于table_1
和的信息的表table_2
。
我正在尝试决定是否应该将和info
的 ID 组合作为主键。如果我要这样做,其中哪一个最有意义?(在此示例中,我将 ID 11209 与 ID 437 结合使用)table_1
table_2
INT(9)
11209437 (我可以想象为什么这很糟糕)
VARCHAR (10)
11209-437
DECIMAL (10,4)
11209.437
或者是其他东西?
将其用作 MYSQL MISAM DB 上的主键可以吗?
c# - 复合主键/外键头痛
我正在使用 SQL Server 2008 R2、C# 和 ASP.Net。我有一个表,它有一个由票号组成的复合主键,以及该票在表中出现的次数。通过 C# 代码计算出票频率:
我的表约束/等代码
唯一约束的原因是因为主复合键的那部分也是另外两个表的外键。我不断遇到的错误是当它对我大喊大叫时,因为唯一受约束的列中存在重复值。一旦一切从开发转移到生产,这可能会发生,因为可能会重新提交票证。
有没有办法在没有唯一键约束的情况下制作外键?如果没有,我该如何解决这个问题?
java - Hibernate HBM2DDL 为主外键生成可为空的字段?
我正在使用 hbm2ddl(来自 hibernate3-maven-plugin 2.2)基于我的 JPA 注释实体生成 DDL。通常,这可以正常工作,但我最近介绍了一个使用由两个外键组成的复合键的实体,这导致 DDL 生成出现问题。
具体来说,生成的 DDL 指定主键列可以为空,而主键列不应该是这种情况。因此,MSSQL 无法创建主键约束,因为该列可以为空。
这是实体
该实体指定它使用 PricePK 作为其主键类,更重要的是,构成主键的两个 ManyToOne 实体不是可选的(这应该意味着 DDL 中的列“非空”)。这是 PricePK 类:
为 Price 表生成的 DDL 如下 - 请注意,currency_id 和 product_id 都允许为空:
当我尝试在 MSSql 中运行脚本时,出现以下(不足为奇)错误:
不成功:创建表 store.PRICE (version int null, amount numeric(19,2) null, currency_id int null, product_id int null, 主键 (currency_id, product_id)) 无法在表 'PRICE' 中的可空列上定义 PRIMARY KEY 约束.
知道为什么正在生成的 DDL 为这两个外键列指定“null”吗?
hibernate - Hibernate Composite主键包含外键,它是其他表主键的子集,如何映射?
场景如下
表 A 有一个复合 PK。
表 B 也有一个复合 PK,它实际上是 A 的 PK 的子集,这里也作为 FK 工作。没有强制的 FK 约束。
我尝试了几种方法,但都没有奏效。谁能告诉一个有效的 Hibernate 映射解决方案?注释风格更好。
非常感谢。
薇薇
ms-access-2007 - 如何在 MS Access 中定义复合键?
我是 MS Access 的新手。谁能告诉我如何在 MS Access 2007 中定义复合主键。
hibernate - Hibernate二级缓存composite-id
我正在尝试在 Hibernate 的二级缓存中缓存一个对象,该对象在我的持久性映射文件中映射了一个复合 ID。日志说我第一次运行查询时,映射为复合 ID 的类被放入缓存中。但是,当我第二次运行查询时,不会从缓存中提取对象。相反,它再次运行查询。
Hibernate 二级缓存复合 id 有问题吗?
相关资料:
- 使用休眠 3.1、ehcache 2.4.2
- 复合ID类实现可序列化
- 第二次运行查询时,我正在使用新的 Hibernate 会话
- 我正在使用 hibernateTemplate.load(Class, ID) 来检索对象
这就是我构建 ID 和执行查询的方式:
这就是我的持久性映射文件如何定义上述内容:
编辑:情节变厚了....
当我将其更改为只读缓存策略时,它运行良好。事务缓存行为似乎是极其不可预测的。任何人都可以解释为什么上述情况发生在读写缓存中,但在只读缓存中工作得很好?该表未更新,因此不确定为什么事务语义会在该实例中改变事物。
sql - 复合索引主键与唯一自增主键
我们有一个超过 1.11 亿行的事务表,它的聚集复合主键为...
...在 SQL 2008 R2 数据库中。
我们将很快为归档项目截断并重新填充表,因此一旦表被截断,就有机会获得正确的索引。保留复合主键会更好,还是应该使用唯一的自动增量主键?
表上的大多数搜索都是使用 DateOfSale 和 RevenueCentreID 列完成的。我们也经常加入 SaleItemID 列。我们很少使用 SaleType 列,实际上它只是包含在主键中以实现唯一性。我们不关心插入和删除新的销售数据需要多长时间(一夜之间完成),而是返回报告的速度。
mysql - sql - 一列外键到两列主键
可能重复:
外键可以引用非唯一索引吗?
我只是将一个应用程序从 MySQL 移植到 PostgreSQL 和 MS SQL Server,我发现了奇怪的定义(至少据我所知)。
这是一个简化的例子。
为什么这在 MySQL 中是可能的,它应该如何表现?
t1.a 不是唯一的,甚至 t1.b 也不是。他们一起创建了唯一的记录,这就是主键。t2.a 是对 t1.a 的外键引用,但 t1.a 只是 t1 中主键的一部分。
你怎么看待这件事?
明明数据库设计错了?如果是这样,为什么在 MySQL 中允许这样做?
谢谢!
sql-server - SQL Server 2005 + Entity Designer -- 外键约束错误?
在 VS2010 中使用实体设计器为 SQL Server 2005 构建数据库。当我尝试通过“从模型生成数据库”生成的 SQL 实际构建表时遇到问题;这些表都是正确创建的,但它在外键约束上发出嘶哑的声音。
有争议的实体在此处列出:
这部分生成的SQL代码就是问题所在:
错误是这样的:
引用表“dbo.Zone”中没有与外键“FK_ZoneRegion”中的引用列列表匹配的主键或候选键。
我不得不假设这个问题与这样一个事实有关,在我的多列主键(WORLD_ID+ZONE_ID+REGION_ID)中,ZONE_ID 和 WORLD_ID 都是外键,特别是 WORLD_ID 实际上也是表与 FK 的来源。
我这里的结构有问题吗?对我来说,只有一个来自 Zone -> Region 的关联不好吗?事实上,我必须有两个关联,一个来自 World -> Region,一个来自 Zone -> Region?
谢谢,-丹
primary-key - 更新主键
我有一个表 A (code,id,num,address)
这里 code、id 和 num 是主键,任何其他表上都没有外键依赖项。
我需要num
使用id
...进行更新,我可以这样做吗?
num 是电话号码。我想出来了。但我还有一个问题
我们可以仅使用 num 更新同一列 num 吗?例如 UPDATE A SET num = '' WHERE num = '';