2015-04-21 3 views
0

ВопросПринято методологии при использовании нескольких баз данных SQLite

Что такое общепринятый способ использования нескольких баз данных, которые записывают информацию о том же объекте, что в конечном счете, в конечном итоге, живущих в одной центральной базе данных?

Пример

Существует один основной SQL базы данных о деревьях.

Эта база данных содержит информацию об уникальных деревьях со всей Великобритании.

Для получения информации создается пустая база данных Sqlite (с той же схемой) и берется в дерево на телефоне.

Собранная информация затем сохраняется в базе данных Sqlite до тех пор, пока она не будет возвращена в основную базу данных, где она будет перенесена в основную базу данных.

Теперь это прекрасно работает, пока есть только одна база данных Sqlite для любого дерева за раз.

Однако, если два человека захотели собрать различную информацию для одного и того же дерева одновременно, когда они оба вернулись и попытались перенести свои данные в основную базу данных, были бы столкновений по их основным ключевым ограничениям.

ID Схемы (с примера данных)

Существует дерево таблица, которая имеет уникальный идентификатор, называемый treeID

TreeID - TreeName - Расположение

1001 - Теддингтон поле - Плимут

Branch стол

BranchID - BranchName - TreeID
1001-10001 - первый филиал - 1001

1001-10002 - второй филиал -1001

Оставить стол

LeafID - LeafName - BranchId 1001-10001-1 - Спальня - 1001-10001

1001-10002-2 - Ванная комната - 1001-10001

Возможные идеи

  1. Присвоить каждая база данных 1000 уникальных идентификаторов и затем они возвращаются, поскольку идентификаторы уже назначены, идентификаторы в каждой базе данных не будут сталкиваться.

Downfall

Это не очень динамична и может потерпеть неудачу, если один перерасход базы данных на своих заранее заданными идентификаторами.

Есть ли другой способ достичь такой же гибкости, но с учетом падения, упомянутого выше?

+0

Ну, с одной стороны, как вы собираетесь уникально идентифицировать дерево? Это своего рода отправная точка для любых дальнейших соображений. Потому что, если вы не можете точно это решить в 99% + случаев, у вас будет довольно грязный дублированный набор данных. Из вашего вопроса это звучит почти так, как будто у вас есть идентификатор дерева. Можете ли вы рассказать о своих уникальных схемах? Уточнение: с точки зрения вашего бизнеса, а не с точки зрения базы данных. Является ли точное местоположение gps, например? –

+0

Что касается вашей возможной идеи: так ли имеет значение id? Невозможно, чтобы «центральный» db просто создавал их по мере их вставки, и если они каким-то образом нуждались в синхронизации с мобильными базами данных, возвращайте значения. – Mackan

+0

@JLPeyret, каждому дереву присваивается уникальное четырехзначное число. Таким образом, можно однозначно идентифицировать каждое дерево. Каждому дереву присваивается идентификатор в основной базе данных, и из него создается sqlite. Я думаю, что пример сбора информации о деревьях был плохим. Я изменю пример и добавлю дополнительную информацию. –

ответ

1

Таким образом, в качестве ответа:

на мастер-БД, хранить дополнительное поле, идентифицирующий базу данных источника/сбора, что набор данных был собран на, а также дерево идентификатор.

(src01, 1001), (src02, 1001)

Это также позволяет связать обратно легко с источником сбора информации, которая, вероятно, будет в будущем требования. Теперь вы можете или не захотите автогенерировать другое ключевое значение идентификатора последовательности в таблице master db (я бы этого не делал, потому что я не очень люблю суррогатные ключи), но я определенно буду отслеживать источник/дерево. была первоначально собрана в поле, отдельно от любых основных соображений главного db.

1

Видимо, вы говорите об автогенерированных идентификаторах для связанных объектов, а не о идентификаторах самих деревьев. Два разных человека, собирающих информацию о том же дереве, начиная с одного и того же стартового набора, в конечном итоге генерируют одинаковые идентификаторы независимо. Два набора генерируемых идентификаторов не могут сосуществовать в одном и том же БД.

Поскольку вы хотите сохранить все новые данные. Одно из возможных решений - избегать использования идентификаторов, генерируемых полем, в центральной базе данных. Когда каждый набор данных поступает, берете данные, которые были добавлены в поле, и программно добавляйте их в центральный БД способом, эквивалентным тому, как они добавляются в поле, позволяя центральному БД автогенерировать свои собственные ID.

Для этого требуется механизм для выделения вновь собранных данных из старого, но это может быть так же просто, как временная метка.

Смежные вопросы