Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 选择桌子的最佳做法是什么;s主键_Android_Sqlite_Realm - Fatal编程技术网

Android 选择桌子的最佳做法是什么;s主键

Android 选择桌子的最佳做法是什么;s主键,android,sqlite,realm,Android,Sqlite,Realm,我曾经创建一个名为“id”的列,它在我创建的任何表中都是自动递增的。但在某些情况下,我发现这个专栏是无用的,而另一个类似“citizen_ssn”的专栏更适合作为主键 那么,选择表主键的最佳实践是什么? 我应该使用符合需要的内容还是创建自动递增列或其他意见?任何唯一且不为null的属性都可以用作主键。通常,id被许多开发人员用作主键。但是除了上面提到的,没有这样的规则。什么是主键 除了自动递增外,主键还用于标识行。因为每一行都是唯一的,所以主键也是唯一的。列号为n的两行或多行可以具有相同的值,比

我曾经创建一个名为“id”的列,它在我创建的任何表中都是自动递增的。但在某些情况下,我发现这个专栏是无用的,而另一个类似“citizen_ssn”的专栏更适合作为主键

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

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

什么是主键

除了自动递增外,主键还用于标识行。因为每一行都是唯一的,所以主键也是唯一的。列号为
n
的两行或多行可以具有相同的值,比如“Australia”,但具有主键约束的列将具有唯一的值

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

你也可以使用
phoneNumber
作为主键。 取决于使用情况


我希望我已经说清楚了。

领域
没有真正的理由使用自动递增主键。(虽然如果您的服务器返回主键信息,那么知道您引用的是同一个对象是很有用的)

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

在领域中,您可以将对象链接在一起作为一个字段,如
private-OtherObject-OtherObject,以及许多关系,如
私有RealmList otherObjects
。所以您不需要主键来创建关系


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

我认为这取决于您想要如何控制重复数据消除公民如果您想要通过代码控制它,最好是自动递增的;另一方面,如果您喜欢数据库控制它,您应该在公民中使用PK。\n建议您在ID中使用一个专用列,其中包含值将保持不变。如果
citizen\u ssn
是用户提供的,或者可能会更改,那么将其用作主键不是一个好主意。