Нужны некоторые рекомендации для базы данных Sqlite - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать базу данных, которая имеет 8 ролей. Id равно PK с автоинкрементом . После этого эти 4 заголовки и еще один код объекта (также пытается выполнить автоматическое увеличение) , ответственное лицо и последний - LastTxnNo (Date) .

Picture

Есть ли проблемы, если я использую это все типы? После этого эта база данных может быть помещена в Android Studio и вызвать ее?

1 Ответ

0 голосов
/ 29 августа 2018

Есть ли проблема, если я использую все типы?

Нет (если вы не превысили 9223372036854775807 строк, как описано ниже).

Однако вам, скорее всего, не нужно использовать AUTOINCREMENT. AUTOINCREMENT просто говорит, что id должен быть больше, чем любые другие, которые когда-либо использовались (если вы не вмешиваетесь).

Настоящее волшебство как таковое - это когда вы набираете код INTEGER PRIMARY KEY, который говорит, что столбец (т. Е. Идентификатор в вашем случае) является псевдонимом специального / обычно скрытого rowid столбца. rowid - это автоматически генерируемое уникальное 64-битное целое число со знаком, обычно оно будет на 1 больше, чем самый большой из существующих rowid , сначала оно будет равно 1.

При AUTOINCREMENT требуется дополнительная таблица, поскольку в ней будет храниться наибольшее выделенное значение rowid . Новый rowid обычно будет на 1 больше, чем самый высокий из существующих или самый высокий используемый rowid . Из-за необходимости читать и поддерживать эту дополнительную таблицу (sqlite_sequence) существуют накладные расходы, связанные с использованием AUTOINCREMENT. Рекомендуется не использовать AUTOINCREMENT, если это не нужно.

AUTOINCREMENT из-за того, что следующий rowid будет больше, чем любой существующий, произойдет сбой с исключением SQLITE_FULL, если вы достигнете 9223372036854775807 (ограничено 64-разрядным целым числом со знаком). Хотя без AUTOINCREMENT используемый алгоритм попытается найти более низкий неиспользуемый / свободный идентификатор, поэтому он может не потерпеть неудачу.

Вы можете прочитать Автоинкремент SQLite

Столбец UnitCode может не требоваться. Вы предлагаете скопировать поведение rowid . В качестве такового вы могли бы просто использовать rowid (как было сказано ранее здесь ).

Возможно, вы могли бы иметь другую таблицу для PersonInCharge, если PersonIncharge может отвечать более чем за 1 строку в информационной таблице. например Вы можете использовать 10 боссов на 1000 информационных строк. Если имя этого человека длиннее 1 символа, то шансы на ссылку на имя этого человека с помощью rowid таблицы PersonInCharge могут быть более эффективными при поиске и могут занимать меньше места и памяти. Это, безусловно, будет придерживаться концепции нормализации (сокращение дублирования данных).

После этого эта база данных может быть помещена в Android Studio и вызвать ее из

Да, внешне созданную базу данных можно скопировать в папку ресурсов или подкаталог папки ресурсов. Затем у вас есть процесс, который проверяет, существует ли база данных, и если нет, то базу данных можно скопировать из папки ресурсов в подходящее место (базы данных или обычно расположены в data/data/your_package/databases/) имя файла в том виде, в котором оно было скопировано, должно совпадать с именем базы данных (включая расширение файла). Вы можете найти SQLiteAssethelper использования.

Принимая во внимание, что SQLiteAssetHelper ожидает, что файл базы данных (ресурс) будет находиться в папке database каталога / директории assets folder / directory.

...