我开发了一个Android应用程序,允许用户记录某些活动。我现在想要添加一个功能,用户可以将数据备份到服务器,这样如果他们有多个设备,他们就可以从中下载。
我开始研究基于Spring-Boot的Web应用程序。这将是纯粹的json,不会有web-ui。
我遇到了关于主键和外键的问题。例如,我在服务器上有这个表。
CREATE TABLE user_activities (
id INT AUTO_INCREMENT
, user_id INT
, activity_date DATETIME
, notes TEXT
, PRIMARY KEY (id)
);
此表位于客户端上的SQLite上。
CREATE TABLE user_activities (
id INT AUTO_INCREMENT
, user_id INT
, activity_date LONG
, notes TEXT
);
当用户离线创建活动记录时,它将生成主键。当用户上线时,我将通过执行httpPost来同步数据。但是,我无法使用生成的ID,因为它可能会导致重复的问题。
我可以使用哪种方法?
感谢任何帮助。
更新1
确定。所以根据Jorge Moreno和nuuneoi的评论,我想出了这个设计。
更新2
在查看设计之后,我可能错过了客户端的专栏。那里也添加了device_id列。
我认为local_id可能在用户设备上相似,因此添加device_id将无法使用device_id和local_id来获得类似的值。
服务器
CREATE TABLE user_activities (
id INT AUTO_INCREMENT
, device_id VARCHAR(100) -- Actual Devices Id (e.g. Phone, Tablet). To handle if a user has multiple devices
, local_id INT
, user_id INT
, activity_date DATETIME
, notes TEXT
, PRIMARY KEY (id)
);
客户端
CREATE TABLE user_activities (
id INT AUTO_INCREMENT
, user_id INT
, device_id TEXT -- Added on UPDATE 2
, activity_date LONG
, notes TEXT
);
感谢任何反馈。
答案 0 :(得分:2)
没有从sqlite发送id值,sql server有id autoincrement
答案 1 :(得分:1)
如何在服务器上使用此表。
CREATE TABLE user_activities (
id INT AUTO_INCREMENT
, local_id INT
, user_id INT
, activity_date DATETIME
, notes TEXT
, PRIMARY KEY (id)
);
和SQLite上的这个表?
CREATE TABLE user_activities (
local_id INT AUTO_INCREMENT
, user_id INT
, activity_date LONG
, notes TEXT
);
答案 2 :(得分:0)
在阅读下面列出的几个线程后,我决定使用UUID作为我的主键列,并从每个客户端生成一些随机UUID。
how good is java's UUID.randomUUID? Android (distributed application) primary key strategy