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

mysql - 用MySql中的自然键改造表中的代理键?

假设一个表使用自然键并且有许多现有的行。改造代理键列并使用 MySql 用唯一值填充它的最简单方法是什么?

即变换

并用有效的 id:s 填充新的 id 列。

谢谢/埃里克

0 投票
5 回答
2726 浏览

entity-framework - 实体框架和字符串键之间的关联

我是实体框架的新手,并且是那个mather的ORM。在我参与的项目中,我们有一个遗留数据库,它的所有键都是字符串,不区分大小写。

我们正在转换为 MSSQL 并希望将 EF 用作 ORM,但遇到了问题。

这是一个说明我们的问题的例子:

TableA 有一个主字符串键,TableB 有一个对该主键的引用。

在 LINQ 中,我们编写如下内容:

如果 TableA 包含读取“A”的主键,并且 TableB 包含引用 TableA 但在引用字段“a”和“A”中具有不同大小写的两行。

在我们的项目中,我们希望两行都出现在结果中,但只有匹配大小写的行才会出现在结果中。

使用 SQL Profiler,我注意到两行都被选中。

有没有办法告诉实体框架键不区分大小写?

编辑:
我们现在已经用 NHibernate 对此进行了测试,并得出结论 NHibernate 可以使用不区分大小写的键。所以 NHibernate 对我们来说可能是一个更好的选择。
然而,我仍然有兴趣找出是否有任何方法可以改变实体框架的行为。


感谢您的回答!

问题是,如果我们现在将该约束添加到数据库,遗留应用程序可能会因为它的构建方式而停止工作。如果可能的话,对我们来说最好的办法是改变 EF 的行为。我猜这是不可能的,但我正在试一试。


问候,
弗雷德里克

编辑:我为自己的问题添加答案的原因是我在成为注册用户之前添加了这个问题,并且当我注册了我的帐户时,我无法添加评论或编辑我的帖子。现在帐户已合并。

0 投票
1 回答
993 浏览

django - Django ManyToManyField 关联表必须有代理键吗?

我正在将现有的数据库结构映射到 Django 模型中。我有一个多对多结构,其中关联表是自然键控的:

有没有办法让 Django 的 ORM 映射这个?我必须更改 foo2bar 以使用代理键吗?例如

0 投票
7 回答
22129 浏览

java - Hibernate 中的自然标识符是什么?

在阅读 Hibernate 文档时,我不断看到对自然标识符概念的引用。

这是否仅仅意味着实体由于其所拥有数据的性质而具有的 id?

例如,用户名 + 密码 + 年龄 + 某物用作复合标识符?

0 投票
9 回答
287 浏览

sql - 用户的唯一标识符

如果我通常有一个包含一百个用户的表,我只会设置一个自动递增的 userID 列作为主键。但是,如果突然我们有 100 万或 500 万用户,那将变得非常困难,因为我希望开始变得更加分布式,在这种情况下,自动增量主键将毫无用处,因为每个节点都将创建相同的主键。

解决方案是使用自然主键吗?我很难为这群用户考虑一个自然的主键。问题是他们都是年轻人,所以他们没有国家保险号码或我能想到的任何其他唯一标识符。我可以创建一个多列主键,但仍然有机会,但重复发生的次数很少。

有谁知道解决方案?

谢谢

0 投票
1 回答
454 浏览

c# - 我可以使用分配的自然键标识符,同时仍然允许 NHibernate 识别瞬态实例吗?

对象A具有一对多关联:许多对象B

当我查看数据库时TableB——我希望看到唯一的、可读的字符串,A.Name而不是总是在代理整数标识符上加入或子选择来查看名称。

我可以映射Name为 的标识符A,但这会导致大量额外的SELECT查询,因为 NHibernate 无法识别 的实例A是瞬态的还是持久的。

我想我可以使用复合键,将本地分配的代理键与自然键结合起来。这似乎不是最理想的,但我很想听听一些意见。

我真正想要的是一种使用单列自然键同时允许 NHibernate 识别瞬态实例的策略。

  • 可能吗?
  • 什么是映射——fluent 还是 hbm?

另一方面,如果这一切都是一个糟糕的想法,我应该只依靠带有子选择的数据库视图,请解释一下。

谢谢。

0 投票
10 回答
3396 浏览

sql - 关系数据库设计问题 - 代理键或自然键?

哪一个是最佳实践,为什么

a) 类型表,代理/人工键

外键是从user.typetype.id替代文字

b) 类型表,自然键

外键是从user.typetype.typeName替代文字

0 投票
4 回答
889 浏览

django - 自动生成自然键

我正在研究一种方法来序列化数据库 A 中的部分数据并在数据库 B 中对其进行反序列化(一种不同安装之间的保存/恢复),并且我查看了 Django自然键以避免由于重复 ID 而导致的问题.

唯一的问题是我应该为我的所有模型添加一个自定义管理器和一个新方法。有没有办法让 Django 通过查看unique=Trueunique_togheter字段自动生成自然键?

0 投票
1 回答
3031 浏览

hibernate - Hibernate:将引用映射到子表的替代/自然键列时出现错误?

最初的问题源于这个问题:

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

如您所见,这个星座也吓坏了 Eclipse Dali JPA 验证器。JPA 规范似乎允许这样做,如此处所示(有点可靠):

JPA 规范是否允许引用非主键列?

第一个问题中发布的确切代码也引发了 Hibernate MappingException:

我对“递归属性”特别恼火。毕竟,它只是对 GeoAreas 子表 Country 的 UNIQUE、NOT NULL CHAR(2) 列的简单单列引用。请注意,继承在这里可能会产生一些影响,但恕我直言,它仍然不是太复杂。

那么,这是一个 Hibernate 错误吗?

0 投票
1 回答
513 浏览

nhibernate - 使用自然键的流畅 NHibernate 引用实体

我正在使用 Fluent NHibernate 自动映射功能。我已经设法使用约定使数据库映射非常接近,但有一些事情我需要 IAutoMappingOverride。

在遗留系统中,我有一个实体类“Campus”,它有一个 NATURAL 键“代码”。该键的 Oracle 数据库类型是 VARCHAR2(3 BYTE)。我为此使用了覆盖,因为我的约定否则会假定自动生成的代理键。我有其他引用 Campus 实体(带有其自然键)的实体类(例如 Building),如下所示

使用以下覆盖,我生成的 HBM 映射似乎是正确的:

但是,模式导出(Oracle 数据库)不正确。

如您所见,building.camp_code 是 NVARCHAR2(255),这似乎是 Oracle 中 String 的默认值,但它应该是 VARCHAR2(3 BYTE)。

我看到有一个 mapping.NaturalId 函数,但我不确定它是否正常工作,因为如果我用它代替 Id,我会得到一个映射异常。

对于如何处理这种情况,我将不胜感激。

亲切的问候,瑞恩。