[問題] 整合資料庫時主鍵的選擇
最近受人委託在寫一個系統,使用的是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
→
07/21 22:16, , 1F
07/21 22:16, 1F
推
07/22 02:16, , 2F
07/22 02:16, 2F
→
07/22 02:18, , 3F
07/22 02:18, 3F
→
07/22 02:21, , 4F
07/22 02:21, 4F