Есть ли проблема, если я использую все типы?
Нет (если вы не превысили 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.