选择表的主键的最佳做法是什么

时间:2017-10-03 10:28:21

标签: android sqlite realm

我曾经创建了一个名为'id'的列,它在我创建的任何表中自动递增。虽然在某些情况下我发现这个列没用,而另一个像'citizen_ssn'这样的列是更好的候选者。

那么,选择表主键的最佳做法是什么? 我应该使用符合需求的内容还是创建自动增量列或其他意见?

3 个答案:

答案 0 :(得分:2)

任何唯一且不为null的属性都可以用作主键。通常id被许多开发人员用作主键。但除了上面提到的,没有这样的规则。

答案 1 :(得分:1)

什么是主键?

除了自动递增之外,主键用于识别行。由于每一行都是唯一的,因此主键也是如此。列号为n的两行或多行可以具有相同的值,让我们说"澳大利亚"但具有主键约束的列将具有唯一值。

因此,使用id列作为主键并不重要。

也可以使用phoneNumber作为PK。 取决于用法。

我希望我已经清楚了。

答案 2 :(得分:-1)

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

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

在Realm中,您可以将对象链接为private OtherObject otherObject;之类的字段,将许多关系链接为private RealmList<OtherObject> otherObjects。因此,您不需要主键来创建关系。

在Realm中您可能需要它们,如果您想使用insertOrUpdate()方法通过其主键更新Realm中的现有对象,则使用非托管对象覆盖它。您也可以通过调用托管对象的setter来编辑对象,因此这不是完全必要的。