我曾经创建了一个名为“id”的列,它在我创建的任何表中都会自动递增。在某些情况下,我发现这个列是无用的,而另一个列,如'citizen_ssn'是一个更好的候选人作为主键。那么,选择表的主键的最佳实践是什么呢?我应该使用什么将适合需要或创建自动递增列或其他意见?
gtlvzcf81#
任何唯一且非空的属性都可以用作主键。id通常被许多开发人员用作主键。但除了上面提到的,没有这样的规则。
id
ct3nt3jp2#
什么是主键?除了自动递增之外,主键还用于标识行。因为每一行都是唯一的,所以主键也是唯一的。两个或多个列号为n的行可以具有相同的值,例如“Australia”,但具有Primary Key约束的列将具有唯一值。因此,使用id列作为主键并不重要。也可以使用phoneNumber作为PK。这取决于使用。我希望我说得够清楚了
n
phoneNumber
lbsnaicq3#
在Realm中,没有真实的理由需要一个 * 自动递增 * 主键。(尽管如果你的服务器返回主键信息,那么知道你引用的是同一个对象是很有用的)。在SQLite(或任何关系数据库)中,你需要它们的原因是,这是你将两个对象链接在一起的唯一方式(通过JOIN)-例如,多-多关系是用一个Join Table完成的,Join Table包含两个链接表的主键作为外键。在Realm中,您可以将对象链接在一起,如private OtherObject otherObject;字段,以及private RealmList<OtherObject> otherObjects许多关系。所以你不需要主键来创建关系。在Realm中,您可能需要它们的原因是,如果您想使用insertOrUpdate()方法通过其主键更新Realm中的现有对象,请使用非托管对象对其进行重命名。您还可以通过调用托管对象的setter来编辑对象,因此这不是完全必要的。
Realm
private OtherObject otherObject;
private RealmList<OtherObject> otherObjects
insertOrUpdate()
3条答案
按热度按时间gtlvzcf81#
任何唯一且非空的属性都可以用作主键。
id
通常被许多开发人员用作主键。但除了上面提到的,没有这样的规则。ct3nt3jp2#
什么是主键?
除了自动递增之外,主键还用于标识行。因为每一行都是唯一的,所以主键也是唯一的。两个或多个列号为
n
的行可以具有相同的值,例如“Australia”,但具有Primary Key约束的列将具有唯一值。因此,使用
id
列作为主键并不重要。也可以使用
phoneNumber
作为PK。这取决于使用。我希望我说得够清楚了
lbsnaicq3#
在
Realm
中,没有真实的理由需要一个 * 自动递增 * 主键。(尽管如果你的服务器返回主键信息,那么知道你引用的是同一个对象是很有用的)。在SQLite(或任何关系数据库)中,你需要它们的原因是,这是你将两个对象链接在一起的唯一方式(通过JOIN)-例如,多-多关系是用一个Join Table完成的,Join Table包含两个链接表的主键作为外键。
在Realm中,您可以将对象链接在一起,如
private OtherObject otherObject;
字段,以及private RealmList<OtherObject> otherObjects
许多关系。所以你不需要主键来创建关系。在Realm中,您可能需要它们的原因是,如果您想使用
insertOrUpdate()
方法通过其主键更新Realm中的现有对象,请使用非托管对象对其进行重命名。您还可以通过调用托管对象的setter来编辑对象,因此这不是完全必要的。