作者neverfly (neverfly)
站内Programming
标题[问题] 整合资料库时主键的选择
时间Mon Jul 21 21:53:04 2008
最近受人委托在写一个系统,使用的是Java语言+SQLite资料库。
但对资料库这块不太熟,只会下基本的SQL语法,
有些问题不晓得应该在Database板问还是在这里问,
但我觉得这似乎程设层面比较高。
我的系统是很传统的Client-Server,
Server有一个资料库,
而Client端不止一个,每一个上面也都有自己的资料库,
基本上Server端跟Client端的资料库结构是完全一样的。
需求就是Client端会自己更新资料,
然後使用者会手动将资料上传到Client端,或从Server端下载更新的资料,
而Client-Server之间资料的传递是使用XML文件。
看起来很简单,我原本的想法是,
在Server端资料库设一个栏位是auto increment的主键,例如叫id,
每次Client端资料只要有新增资料的需求,在写入自己的资料库前,
先上传到Server端写进资料库,
再由Server端回传含Server端id栏位的资料给client,
然後client再写进去。
这样子至少可以确定id这个主键,在Server端跟client端是同步的,
如果之後要修改或删除某一笔资料,
至少有个条件判断的依据,例如delete from list where id=$id;
但现在确定是希望Client能够离线独立操作,
所以我的想法就不成立了。
想请问一下两点,
第一点就是像我上述的问题,怎麽样选择一个比较适合的主键呢?
我有想过用时间,但由於client不止一个,
所以就算取到毫秒,虽然机会不大,但时间上也许有机会重覆到。
第二点就是请问一下,
假设某个时间点,Server端跟Client的资料表是完全相同的,
Server端的资料可能随时被其他的Client改写,
是不是有什麽很快的方法,
可以在某Client登入後,可以马上从未同步化的部份开始更新呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.74.200
1F:→ neverfly:抱歉补充一下,SQLite原则上没太多功能 118.169.74.200 07/21 22:16
2F:推 bob123:主键(cid,did) cid=clientID,did则为各140.120.221.156 07/22 02:16
3F:→ bob123:client上自己定 看是要用timestamp或其他140.120.221.156 07/22 02:18
4F:→ bob123:说错的话不要打我QQ...我只是个新手...140.120.221.156 07/22 02:21