2015-04-21 23 views
0

問題接受的方法使用多個SQLite數據庫

什麼是使用多個數據庫中關於同一對象,這將最終最終將生活在一箇中央數據庫中記錄信息的接受的方式是什麼時候?

有棵左右一個主SQL數據庫。

該數據庫保存來自英國各地的獨特樹木的信息。

要收集信息,將創建一個空白Sqlite數據庫(具有相同的模式)並將其帶到手機上的樹中。

然後將收集到的信息存儲在Sqlite數據庫中,直到它被帶回主數據庫,然後將其傳輸到主數據庫中。

現在,只要一次只有一個Sqlite數據庫出現在任何一棵樹上,它就能正常工作。

但是,如果兩個人想同時爲同一棵樹收集不同的信息,當他們都回來並試圖將他們的數據傳輸到主數據庫時,他們的主鍵約束將會發生衝突。

ID計劃(與實施例的數據)

有一個樹表,其具有稱爲treeID

TreeID唯一標識符 - TREENAME - 位置

1001 - Teddington的字段 - 普利茅斯

分支表

BranchID - BRANCHNAME - TreeID
1001-10001 - 第一科 - 1001

1001-10002 - 二店-1001

休假表

LeafID - LeafName - BranchId
1001-10001-1 - 臥室 - 1001-10001

1001-10002-2 - 浴室 - 1001-10001

可能的想法

  1. 分配每個數據庫1000唯一的ID然後他們回來,因爲ID已經被分配到每個數據庫上的ID不會相互衝突。

倒臺

這是不是很動態的,可能無法在其預分配的ID如果一個數據庫超支。

是否有另一種方法來實現相同的靈活性,但沒有上述的垮臺?

+0

那麼,首先,你將如何唯一識別一棵樹?這是進一步考慮的一個起點。因爲如果你不能在99%以上的情況下準確地解決這個問題,你將會有一個相當髒的重複數據集。從你的問題來看,它幾乎聽起來就像事先擁有樹ID一樣。你能詳細說明你的獨特的身份證計劃嗎?澄清:關於您的業務,而不是數據庫方面。例如,是一個精確的GPS位置? –

+0

關於你的可能想法:這個ID的問題是多少? 「中央」數據庫不能在插入時創建它們,並且如果它們需要與移動數據庫同步,則需要將值返回。 – Mackan

+0

@JLPeyret,每棵樹都有一個唯一的四位數字。所以可以唯一地標識每棵樹。主數據庫中的每個樹都有一個ID,並從中創建sqlite。我認爲收集樹木信息的例子很糟糕。我將更改示例並添加更多信息。 –

回答

1

因此,作爲一個答案:

上的主數據庫,存儲額外的ID字段標識數據集中收集在源/收集數據庫,還有樹ID。

(src01,1001),(src02,1001)

這也讓您輕鬆鏈接到的這很可能會成爲未來需求的信息收集來源。現在,你可能想也可能不想在主數據庫的表上自動生成另一個序列ID鍵值(我不會那樣,因爲我不喜歡代理鍵),但是我肯定會跟蹤它的source/treeid它最初是在現場收集的,分開了任何master db唯一鍵的注意事項。

1

顯然你正在談論的是相關對象的自動生成的ID,而不是樹本身的ID。兩個不同的人收集關於同一棵樹的信息,從相同的起始集開始,最終獨立地生成相同的ID。這兩組生成的ID不能共存於同一個數據庫中。

既然你想保留全部的新數據。一種可能的解決方案是避免在中央數據庫中使用字段生成的ID。當每組數據進入時,取出在該字段中添加的數據,並以編程方式將它們添加到中央數據庫中,方式相當於它們在字段中的添加方式,讓中央數據庫自動生成自己的 ID。

這需要一種機制來區分新收集的數據與舊數據,但這可能與時間戳一樣簡單。