问题
使用多个数据库记录有关最终最终生活在一个中央数据库中的同一对象的信息的可接受方式是什么?
示例
有一个关于树的主要SQL数据库。
此数据库包含有关来自英国各地的独特树木的信息。
要收集信息,请创建一个空白的Sqlite数据库(使用相同的模式)并将其带到手机上的树中。
然后将收集的信息存储在Sqlite数据库中,直到它被带回主数据库,然后将其传输到主数据库。
现在只要一次只有一个Sqlite数据库出现在任何一个树上,这个工作正常。
但是,如果两个人想要同时为同一个树收集不同的信息,当他们都回来并试图将他们的数据传输到主数据库时,他们的主键约束就会发生冲突。
ID方案(包含示例数据)
有一个树表,它有一个名为treeID的唯一标识符
TreeID - TreeName - 位置
1001 - 特丁顿场 - 普利茅斯
分支表
BranchID - BranchName - TreeID
1001-10001 - 第一分公司 - 10011001-10002 - 2nd Branch -1001
离开表
LeafID - LeafName - BranchId
1001-10001-1 - 卧室 - 1001-100011001-10002-2 - 浴室 - 1001-10001
可能的想法
亡
这不是非常动态的,如果一个数据库超出其预先分配的ID,则可能会失败。
是否有另一种方法可以实现相同的灵活性,但没有上述的垮台?
答案 0 :(得分:1)
显然,您正在谈论相关对象的自动生成ID,而不是树本身的ID。收集有关同一树的信息的两个不同的人,从相同的起始集开始,最终独立地生成相同的ID。这两组生成的ID不能在同一个DB中共存。
由于您希望所有新数据。一种可能的解决方案是避免在中央数据库中使用字段生成的ID。当每组数据进入时,获取在该字段中添加的数据,并以与在字段中添加它们的方式相同的方式将它们以编程方式添加到中央DB,让中央DB自动生成自己的< / em> ID。
这需要一种机制来区分新收集的数据和旧数据,但这可能与时间戳一样简单。
答案 1 :(得分:1)
所以,作为答案:
主数据库上的,存储一个额外的id字段,用于标识收集数据集的源/集合数据库,以及树ID。
(src01,1001),(src02,1001)
这也允许您轻松链接回信息的收集来源,这可能是未来的要求。现在,您可能想要或不想在主数据库表上自动生成另一个序列ID键值(我不会这样,但因为我不喜欢代理键),但是我肯定会跟踪它最初在字段中收集的源/ treeid,与任何主数据库唯一密钥注意事项分开。