Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个Sqlite数据库时可接受的方法_Sql_Sqlite - Fatal编程技术网

使用多个Sqlite数据库时可接受的方法

使用多个Sqlite数据库时可接受的方法,sql,sqlite,Sql,Sqlite,问题 使用多个数据库记录同一对象的信息(最终将生活在一个中央数据库中)的公认方式是什么 示例 有一个关于树的主要SQL数据库 该数据库保存了来自英国各地的独特树木信息 为了收集信息,将创建一个空白的Sqlite数据库(使用相同的模式),并将其带到电话树中 收集的信息随后存储在Sqlite数据库中,直到它被带回主数据库,然后在主数据库中传输到主数据库中 现在,只要一次只有一个Sqlite数据库用于任何一棵树,这种方法就可以正常工作 但是,如果两个人想同时为同一棵树收集不同的信息,当他们都返回并试图

问题

使用多个数据库记录同一对象的信息(最终将生活在一个中央数据库中)的公认方式是什么

示例

有一个关于树的主要SQL数据库

该数据库保存了来自英国各地的独特树木信息

为了收集信息,将创建一个空白的Sqlite数据库(使用相同的模式),并将其带到电话树中

收集的信息随后存储在Sqlite数据库中,直到它被带回主数据库,然后在主数据库中传输到主数据库中

现在,只要一次只有一个Sqlite数据库用于任何一棵树,这种方法就可以正常工作

但是,如果两个人想同时为同一棵树收集不同的信息,当他们都返回并试图将数据传输到主数据库时,他们的主键约束会发生冲突

ID方案(带有示例数据)

有一个树表,它有一个名为treeID的唯一标识符

TreeID-TreeName-Location

1001-特丁顿油田-普利茅斯

分支表

branchhid-BranchName-TreeID
1001-10001-第一分支机构-1001

1001-10002-第二分支机构-1001

离开桌子

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

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

可能的想法

  • 为每个数据库分配1000个唯一ID,然后返回一个,因为已经分配了ID,所以每个数据库上的ID不会冲突
  • 崩溃

    这不是非常动态的,如果一个数据库在其预先分配的ID上溢出,可能会失败


    是否有其他方法可以实现同样的灵活性,但不存在上述缺点?

    显然,您所说的是为相关对象自动生成的ID,而不是树本身的ID。两个不同的人从同一个起始集开始收集关于同一棵树的信息,最终独立地生成相同的ID。生成的两组ID不能在同一个数据库中共存

    因为你想保留所有的新数据。一种可能的解决方案是完全避免在中央数据库中使用字段生成的ID。当每一组数据进入时,获取在字段中添加的数据,并以编程方式将其添加到中央数据库中,方法与在字段中添加数据的方式相同,让中央数据库自动生成自己的ID

    这需要一种机制来区分新收集的数据和旧收集的数据,但这可能像时间戳一样简单。

    因此,答案如下:

    在主数据库上,存储一个额外的id字段,该字段标识收集数据集的源/集合数据库以及树id

    (src011001),(src021001)


    这还允许您轻松地链接回信息的收集源,这可能是未来的需求。现在,您可能想也可能不想在master db的表上自动生成另一个sequence id键值(我不会,但那是因为我不太喜欢代理键),但我肯定会在字段中跟踪它最初收集的source/treeid,而不考虑任何master db独特的键值。

    ,如何唯一地标识一棵树?这是进一步考虑的一个起点。因为如果你不能在99%以上的情况下准确地解决这个问题,你将会有一个非常脏的重复数据集。从你的问题来看,听起来好像你事先就有了树ID。你能详细说明你独特的身份证方案吗?澄清:就您的业务而言,而不是数据库而言。例如,是一个精确的gps定位吗?关于你可能的想法:id有那么重要吗?“central”db不能在插入时创建它们,如果它们在某种程度上需要与移动数据库同步,就发回值。@JLPeyret,每个树都有一个唯一的四位数。因此,可以唯一地标识每棵树。每个树在主数据库中都有一个ID,sqlite就是从这个ID创建的。我认为收集有关树木信息的例子是一个糟糕的例子。我将更改示例并添加更多信息。好吧,老实说,我首先更担心的是准确的标识,然后再担心以后如何处理数据。现在,如果你能准确地识别目标对象(这是一棵真正的树吗?),那么,如果两个人带着同一目标的数据回来,你可以a)“不,已经完成了”或b“让我们用你的数据更新”。如果您知道自己的需求,并且解决了ID问题,那么技术方面就没有那么难了。那么您可能需要为这两个数据集添加一个与信息源相对应的source_ID字段,并将其保存在主数据库中。在一天结束时,如果您想要保留这两组数据,那么您需要一个额外的键字段来存储数据。i、 e.(src01,1001),(src02,1001)。如何将数据合并到1001的信息取决于您,但支持2个数据集。