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

postgresql - 使用国民身份证作为主键

我正在开发一个使用“识别记录”之一的国家 ID 的系统,将 nat_id 嵌入所有表中以使查询更容易是一个好主意吗?这样做有什么缺点?我只是想从这里的人那里得到意见,因为我可能会错过一些重要的事情。

0 投票
1 回答
1139 浏览

database - 在数据集中查找自然键

我继承了一个大约 40 列和大约 1400 行的表。不幸的是,最初的设计者没有在表中包含一个可识别的 PK,所以我假设他们使用了一个包含 4 或 5 列的自然键。然而,这些列是未知的。

有什么简单的方法可以确定这一点,还是我需要坐下来开始尝试通过选择语句来减少它?

0 投票
2 回答
3689 浏览

python - 加载包含自然键的 Django Fixture

如何加载 Django 固定装置,以使通过自然键引用的模型不会与预先存在的记录冲突?

我正在尝试加载这样的夹具,但我从我的 MySQL 后端收到 IntegrityErrors,抱怨 Django 试图插入重复记录,这没有任何意义。

据我了解Django的自然关键特性,为了完全支持dumpdata和loaddata的使用,你需要在模型中定义一个natural_key方法,get_by_natural_key在模型的管理器中定义一个方法。

因此,例如,我有两个模型:

我的测试数据库已经包含一个示例 Person 和 Book 记录,我用它来生成夹具:

我希望能够使用这个夹具并将其加载到我的数据库的任何实例中以重新创建记录,无论它们是否已经存在于数据库中。

但是,当我运行时,python manage.py loaddata myfixture.json我得到了错误:

为什么 Django 试图重新创建 Person 记录而不是重用已经存在的记录?

0 投票
1 回答
372 浏览

mysql - 如何在避免重复外键的同时更新 MySQL 自然键?

事情是这样的:

我有一个用 jQuery/php/mysql 构建的 webapp。这是一个任务管理器。我有属于类别的类别和任务。任务有一个代理主键(自动增量 id),为了数据库一致性,我有一个自然键(唯一),如下所示:(id_category,位置)

当用户移动任务时,我必须更新该任务在 DB 中的位置(ajax 请求),以及与更改相关的所有其他任务的位置。例如,如果您将位置为 5 的给定任务上移至位置 2,则位置从 4 到 2 的任务的位置必须增加 1。(这是我的方法;我知道有些人将给定类别的整个任务集与新职位一起发送,但我试图只更新需要更新的任务)

问题是我不知道如何在不避免自然键中出现重复错误的情况下更新任务的位置,因为我不能/不知道如何同时更新所有内容。

所以你能帮我解决这个问题吗,或者我应该改变我的方法。我可以删除唯一索引(自然键),但数据库一致性机制有一些东西......

感谢您的任何帮助。

0 投票
3 回答
1640 浏览

django - 是否可以在 Django 中为 GenericForeignKey 使用自然键?

我有以下内容:

我希望 dumpdata --natural 为这种关系发出一个自然键。这可能吗?如果没有,是否有另一种策略不会将我与目标的主键联系起来?

0 投票
1 回答
4845 浏览

python - 固定装置的 Django 自然键给出反序列化错误

我在 SO 上看到了一些与此类似的问题,但似乎没有一个能回答我的特定问题。我是 Django 新手,并按照此页面上的说明指导自己,以允许自己使用自然键来加载固定装置。不过,我收到了反序列化错误,因为 Django 想要一个整数作为外键,并且似乎无法将我的自然键映射到说明中所述的整数主键。具体来说,我的相关模型代码是:

我的 YAML 夹具是:

但是在尝试运行时python manage.py loaddata sample_data.yaml,我收到以下错误:

我究竟做错了什么?

0 投票
3 回答
438 浏览

database-design - 支持表上的自然键与代理键

我已经阅读了许多关于自然主键与代理主键之间之争的文章。我同意使用代理键来识别其内容由用户创建的表的记录。

但是在支持表的情况下我应该使用什么?

例如,在假设的表“orderStates”中。此表中的值不可编辑(用户不能插入、修改或删除此值)。

如果使用自然键将有以下数据:

如果我使用代理键将有以下数据:

现在让我们举个例子:用户输入一个新订单。

在使用自然键的情况下,在代码中我可以这样写:

每次我有一个额外的步骤时,都使用代理键。

每次我必须将订单移动到新状态时,都会发生同样的情况。

那么,在这种情况下,选择一种密钥类型而不是另一种的原因是什么?

0 投票
1 回答
1556 浏览

grails - Gorm 更改主键,未找到 id 为 null

我已经阅读了大量关于此的问题,似乎没有人让它发挥作用。

我正在使用 grails,并且正在创建一个没有 id 作为主键的类。

我收到消息“未找到 id 为空的 usuario”。这是我的域类的代码:

我也尝试了正常的方式:

它实际上使用自然键和所有内容以我想要的方式映射表,它插入新的 usuarios,但 gui 无法检索任何对象并显示错误:“未找到 id 为空的 usuario”

我试图修改 show(Long id) 方法,但它也无济于事,这是我的控制器显示方法:

0 投票
2 回答
2022 浏览

data-warehouse - 如何使用自然键创建事实表

我们有一个包含四个维度表和一个事实表的数据仓库设计:

  • dimUser id、电子邮件、名字、姓氏
  • dimAddress id, 城市
  • dimLanguage id,语言
  • dimDate id、startDate、endDate
  • factStatistic id、dimUserId、dimAddressId、dimLanguageId、dimDate、loginCount、pageCalledCount

我们的问题是:我们要构建包括计算统计信息(取决于 userId、日期范围)和填充外键的事实表。

但是我们不知道如何,因为我们不了解如何使用自然键(根据我们阅读的文献,这似乎是我们问题的解决方案)。

我相信一个自然键是 userId,它在所有计算维度数据的 ETL 作业中都是必需的。

但是有很多困难:

  • 在 ETL 作业 load() 中,我们使用 INSERT IGNORE INTO 进行批量插入以删除重复项 => 我们不知道生成的代理键
  • 如果我们创建元数据(包括一组维度名称、代理键、自然键),由于重复消除,这将不起作用

问题似乎是重复消除策略。有更好的方法吗?

我们使用的是 MySQL 5.1,如果它有什么不同的话。

0 投票
2 回答
2029 浏览

django - Django:通用外键转储数据:无法解析依赖项

我使用通用外键将不同的配置文件与Users继承自auth.User. dumpdata尽管通过了--natural选项,但我无法做到。它说,

错误:无法解析序列化应用列表中 myproject.AdminProfile、myproject.TeacherProfile、myproject.Users 的依赖关系。

根据文档,据说我们需要实现natural_key 方法来获取和闪烁涉及泛型关系的固定装置。我怎么能用这里展示的模型做到这一点?

使用 Django 1.4.3 和 Postgres。