当前位置: 首页 > 知识库问答 >
问题:

房间里的主键应该是Int还是Long?

唐彬炳
2023-03-14

我正在设计一个数据库,该数据库将在Android using Room中实现,在阅读文档后,我发现没有关于使用Int或Long作为主键的建议。

在某些地方,它们使用int主键定义实体:

@Entity
data class User(
    @PrimaryKey var id: Int,
    var firstName: String?,
    var lastName: String?
)

但是在其他地方,它说如果你想得到插入的最后一行的ID,“插入”方法返回一个长的。

@Dao
interface MyDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertUsers(vararg users: User)

    @Insert
    fun insertBothUsers(user1: User, user2: User)

    @Insert
    fun insertUsersAndFriends(user: User, friends: List<User>)
}

如果@插入方法只接收到1个参数,它可以返回一个long,这是插入项的新rowId。如果参数是数组或集合,则应返回long[]或List。

所以,房间里的主键应该是Int还是Long?;是否有关于选择一种类型而不是另一种类型的最佳实践?

共有2个答案

拓拔稳
2023-03-14

两者都很好。在移动设备上(通常大多数情况下)Int应该足够了(它还可以在长时间内为您节省4个字节)。

为什么?使用Int可以存储超过20亿条记录(200万条)。因此,你可以存储一份地球上所有人类的大约1/4的记录。仅供比较:使用Long可以存储超过900万亿条记录(900亿条)。

郏兴贤
2023-03-14

这两种类型都将映射到基础SQLite数据库中的整数。

例如,对于这样的类:

@Entity
data class Test(@PrimaryKey val i: Int, val l: Long)

您将得到一个使用以下查询定义的SQLite表:

CREATE TABLE IF NOT EXISTS `Test` (`i` INTEGER NOT NULL, `l` INTEGER NOT NULL, PRIMARY KEY(`i`))

因此,您可以使用代码中需要的大小。如果出于某种原因决定使用Int,并且用完了值,甚至可以将其更改为Long,而不必稍后迁移数据库。

对于此整数类型,根据SQLite文档:

该值是有符号整数,根据值的大小存储在1、2、3、4、6或8字节中。

 类似资料:
  • 问题内容: 很简单的问题。我正在使用nodejs作为后端构建实时游戏,我想知道是否有任何信息可用于确定哪个更可靠,哪个更有效?我在整个代码中都大量使用Redis和Socket.io。所以我想知道我是否应该使用Socket.io的房间,还是最好使用redis的pub- sub ? 更新: 刚意识到有一个非常重要的原因,为什么您可能想在socket.io房间中使用redis pub / sub。使用S

  • 我正在研究Nodejs/socket.io实时聊天,我需要一些实现房间的建议。 哪一个更好,使用名称空间还是使用房间特性来完全隔离彼此之间的聊天? 是否存在资源使用差异?

  • 我正在为我的数据库管理使用空间,而我在处理实时数据时,对使用什么感到困惑。目前,为了管理实时数据,我使用了,我对此非常满意。我感到困惑的是,我也可以使用来执行相同的操作。

  • 非常简单的问题。我正在使用nodejs作为我的后端构建一个实时游戏,我想知道是否有任何信息可以说明哪个更可靠,哪个更高效?我在整个代码中大量使用Redis和Socket.io。所以我想知道我是否应该使用Socket.io的房间,还是使用redis的pub-sub会更好? 更新:刚刚意识到,您可能希望通过套接字使用redis发布/订阅有一个非常重要的原因。io房间。带插座。io室当您向侦听器发布时,

  • 问题内容: 在Java的JPA中(通过EmbeddedId或IdClass注释)似乎仅对复合数据库键提供第二类支持。当我阅读复合键时,无论使用哪种语言,人们都会碰到它们,因为这是一件坏事。但是我不明白为什么。如今,组合键是否仍然可以使用?如果没有,为什么不呢? 我发现一个同意我的人:http : //weblogs.sqlteam.com/jeffs/archive/2007/08/23/comp

  • 问题内容: 两者之间哪个符合标准? OR 问题答案: 简短的答案是元素在法律上不允许在元素内部。 要了解原因,让我们看一下规格!如果您对HTML规范感到满意,它将回答您的许多问题和好奇心。您想知道一个人是否可以住在。所以… 4.5.1 元素: 类别: 流内容,可触内容。 内容模型: 短语内容。 4.5.5 元素: 分类: 流内容。 内容模型 :零个或多个li和脚本支持元素。 第一部分说元素只能包含