在同步到服务器之前要在本地 android 数据库上设置什么主键?
What primary key to set on local android db before syncing it to server?
我正在制作一个具有数据库模型的应用程序:
Item (int id, String name, String description, Date updatedDate, boolean isSynced)
Item
的 id
是它的主键(在本地和服务器上)并且
id
在服务器上自动生成 mysql db。我正在使用领域在 android 设备上存储 Items
。
用户可以在设备 with/without 互联网上创建和编辑 Items
。当互联网连接可用时同步数据库。
因此,当用户保存一个新的 Item
时,那么 id
我应该将其保存在本地数据库中,以便与服务器同步不会造成问题
示例:
John 在他的 Moto X 和 Samsung S6 上有 3 Items
并且两部手机都同步到服务器。
他将 Moto X 置于飞行模式,并在 Samsung S6 上添加一个 Item
并同步到服务器。
现在,S6 有 ID 为 -> 1,2,3,4
的项目
和 Moto X 的项目 ID -> 1,2,3
当 Moto X 连接到互联网时,它会下载 Item
id
=4 但它仍然处于飞行模式。
虽然 Moto X 仍处于离线状态,但约翰在其上添加了 Item
。我应该为本地数据库上的这个新 Item
提供什么 ID,以便在同步 Moto X 时不会造成任何问题? John 应该可以在离线 Moto X 上编辑这个新的 Item
,所以 id 不能留空。
谢谢
只是吐口水...
向项目 class 添加 int local_id
和 int device_id
。每个与服务器交互的设备都将获得一个唯一且持久的 device_id。在没有互联网连接的设备上创建项目时,如果需要编辑项目,设备可以参考 local_id。当设备连接上一个Item(!isSynced && id == null)时,将Item发送到DB中进行插入操作,然后通过搜索local_id找到新插入的DB行的主键和device_id。主键值被发送回设备,Item 在服务器上的主键设置为 Item 本地副本上的 id
并将 isSynced 设置为 true.
ETA:从数据库服务器检索在其他设备上创建的项目时,将这些项目放入设备的 table.
时,您需要省略外部 local_id
ETA2:您需要更改设备上的 table 设置,以便 local_id
成为主键,而 id
成为唯一键。但是当然 id
仍然是数据库服务器上 table 上的主键。
我正在制作一个具有数据库模型的应用程序:
Item (int id, String name, String description, Date updatedDate, boolean isSynced)
Item
的 id
是它的主键(在本地和服务器上)并且
id
在服务器上自动生成 mysql db。我正在使用领域在 android 设备上存储 Items
。
用户可以在设备 with/without 互联网上创建和编辑 Items
。当互联网连接可用时同步数据库。
因此,当用户保存一个新的 Item
时,那么 id
我应该将其保存在本地数据库中,以便与服务器同步不会造成问题
示例:
John 在他的 Moto X 和 Samsung S6 上有 3 Items
并且两部手机都同步到服务器。
他将 Moto X 置于飞行模式,并在 Samsung S6 上添加一个 Item
并同步到服务器。
现在,S6 有 ID 为 -> 1,2,3,4
的项目和 Moto X 的项目 ID -> 1,2,3
当 Moto X 连接到互联网时,它会下载 Item
id
=4 但它仍然处于飞行模式。
虽然 Moto X 仍处于离线状态,但约翰在其上添加了 Item
。我应该为本地数据库上的这个新 Item
提供什么 ID,以便在同步 Moto X 时不会造成任何问题? John 应该可以在离线 Moto X 上编辑这个新的 Item
,所以 id 不能留空。
谢谢
只是吐口水...
向项目 class 添加 int local_id
和 int device_id
。每个与服务器交互的设备都将获得一个唯一且持久的 device_id。在没有互联网连接的设备上创建项目时,如果需要编辑项目,设备可以参考 local_id。当设备连接上一个Item(!isSynced && id == null)时,将Item发送到DB中进行插入操作,然后通过搜索local_id找到新插入的DB行的主键和device_id。主键值被发送回设备,Item 在服务器上的主键设置为 Item 本地副本上的 id
并将 isSynced 设置为 true.
ETA:从数据库服务器检索在其他设备上创建的项目时,将这些项目放入设备的 table.
时,您需要省略外部local_id
ETA2:您需要更改设备上的 table 设置,以便 local_id
成为主键,而 id
成为唯一键。但是当然 id
仍然是数据库服务器上 table 上的主键。