【问题标题】:What is the best practise in choosing a table's primary key选择表的主键的最佳做法是什么
【发布时间】:2017-10-03 10:28:20
【问题描述】:

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

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

【问题讨论】:

  • 在我看来,这取决于你想如何控制重复的公民,如果你想通过代码控制它另一方面最好自动递增如果你更喜欢数据库控制它,你应该使用 PK在citizen_ssn中
  • 建议您为 ID 使用专用列,该列的值将保持不变。如果citizen_ssn 是用户提供的或可能以其他方式更改,则将其用作主键不是一个好主意。

标签: android sqlite realm


【解决方案1】:

任何唯一且不为空的属性都可以用作主键。一般id被很多开发者用作主键。但是除了上面提到的,没有这样的规则。

【讨论】:

    【解决方案2】:

    什么是主键?

    除了自动递增之外,还使用主键来标识行。由于每一行都是唯一的,因此主键也是唯一的。列号为n 的两行或多行可以具有相同的值,例如“澳大利亚”,但具有主键约束的列将具有唯一值。

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

    也可以将phoneNumber 用作PK。 取决于使用情况。

    我希望我已经说清楚了。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-02
        • 1970-01-01
        • 1970-01-01
        • 2013-12-31
        • 2021-01-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        相关资源
        最近更新 更多