[問題] 整合資料庫時主鍵的選擇

看板Programming作者 (neverfly)時間17年前 (2008/07/21 21:53), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
最近受人委託在寫一個系統,使用的是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
抱歉補充一下,SQLite原則上沒太多功能
07/21 22:16, 1F

07/22 02:16, , 2F
主鍵(cid,did) cid=clientID,did則為各
07/22 02:16, 2F

07/22 02:18, , 3F
client上自己定 看是要用timestamp或其他
07/22 02:18, 3F

07/22 02:21, , 4F
說錯的話不要打我QQ...我只是個新手...
07/22 02:21, 4F
文章代碼(AID): #18X9J1zq (Programming)