选择表主键的最佳实践是什么

问题描述 投票:0回答:3

我曾经创建一个名为“id”的列,该列在我创建的任何表中都会自动递增。虽然在某些情况下,我发现此列毫无用处,而像“citizen_ssn”这样的另一列更适合作为主键。

那么,选择表主键的最佳实践是什么? 我应该使用适合需要的内容还是创建自动递增列或其他意见?

android sqlite realm
3个回答
2
投票

任何唯一且不为空的属性都可以用作主键。通常,许多开发人员都使用

id
作为主键。但除了上面提到的以外,没有这样的规则。


1
投票

什么是主键?

除了自动递增之外,主键还用于识别行。由于每一行都是唯一的,因此主键也是唯一的。具有列号

n
的两行或多行可以具有相同的值,例如“澳大利亚”,但具有主键约束的列将具有唯一值。

因此,使用

id
列作为主键并不重要。

也可以用

phoneNumber
作为PK。 取决于用途。

我希望我已经说清楚了。


-1
投票

Realm
中,没有真正的理由需要有自动增量主键。 (尽管如果您的服务器返回主键信息,那么知道您引用的是同一个对象是很有用的)。

在 SQLite(或任何关系数据库)中,您需要它们的原因是,这是将两个对象链接在一起(通过 JOIN)的唯一方法 - 例如,多对多关系是通过包含以下内容的 Join Table 完成的:两个链接表的主键作为外键。

在 Realm 中,您可以将对象作为字段链接在一起,如

private OtherObject otherObject;
,以及许多关系,如
private RealmList<OtherObject> otherObjects
。所以你不需要主键来创建关系。

在 Realm 中您可能需要它们,如果您想使用

insertOrUpdate()
方法通过其主键更新 Realm 中的现有对象,并用非托管对象覆盖它。您还可以通过调用托管对象的 setter 来编辑对象,因此这并不是完全必要的。

© www.soinside.com 2019 - 2024. All rights reserved.