Как говорится в этом вопросе. В таблице нет первичного ключа. Другие таблицы в базе данных не меняются после уплотнения, а также не имеют первичного ключа.Почему уплотнение Access 2000 db изменяет порядок записей в таблице?
ответ
Без первичного ключа доступ свободен для изменения рядов таблицы по своему усмотрению. Я предполагаю, что эффект зависит от шаблона использования для таблицы. Когда вы удаляете строку, база данных просто отмечает ее как удаляемую. Когда вы компактны, он восстанавливает пространство, перезаписывая удаленные строки с не удаленными строками. Если таблица имеет первичный ключ, тогда база данных будет осторожна, чтобы сохранить порядок строк во время этого процесса (что, следовательно, намного более дорогостоящее действие); в противном случае - нет.
«Если в таблице существует первичный ключ, компактирование переписывает записи таблицы в их порядок первичных ключей. Это обеспечивает эквивалент не поддерживаемых кластеризованных индексов и делает возможности чтения для ядра базы данных Microsoft Jet гораздо эффективнее ».
ACC2000: Defragment and Compact Database to Improve Performance
«Новый метод уплотнения. Сжатие базы данных в настоящее время приводит к индексам хранящихся в формате кластерного-индекс. В то время как кластерный индекс не сохраняется до следующего компактна, производительность до сих пор улучшилась. Это отличается от Microsoft Jet 2.x, где строки данных были сохранены так, как они были введены. Новый компактный метод с кластеризованным ключом основан на первичном ключе таблицы. Новые введенные данные будут во временном порядке ».
New Features in Microsoft Jet Version 3.0
Что ни одна из этих статей говорит вам что-то, что необходимо соблюдать: если существует UNIQUE
ограничение (или уникальный индекс) на NOT NULL
столбцов, то это будет использоваться вместо этого PRIMARY KEY
. То, что я не смог установить, - это то, как ACE/Jet выбирает один, если в таблице есть несколько ограничений UNIQUE
: сначала создано? порядковая позиция первого столбца? первая NOT NULL
порядковая позиция столбца? Твоя догадка так же хороша как и моя.
В таблицах нет заказа. Табличное табличное имя может, но это не та таблица, а объект UI, используемый для отображения таблицы.
Если вы хотите контролировать порядок своей таблицы, используйте инструкцию SQL с предложением ORDER BY.
Вы не должны использовать вид таблицы в приложении.
Если у вас нет приложения и вам не нравится заказ по умолчанию, задайте свойство ORDER BY в таблице данных таблицы и сохраните его или напишите запрос в том порядке, который вам нравится.
Но вам нужно отказаться от идеи, что таблицы имеют какой-либо заказ вообще. Простая идея полностью противоречит основам SQL и теории множеств. Вам не важно, какой порядок записи фактически хранится в физической базе данных.
«Таблицы не имеют порядка» - логическая таблица SQL не содержит физической таблицы ACE/Jet, например. почему еще ACE/Jet установил функции FIRST и LAST? – onedaywhen
Я не знаю, почему они существуют. Я никогда не находил их бесполезными, поскольку нет предсказуемости в отношении того, что они вернут. Ни один из моих приложений Access не сломался, если бы Jet внезапно отказался от поддержки для них. –
Не уверен, что вы имеете в виду. Что несовместимо, что результаты First/Last не предсказуемы? Под «не предсказуемым» я подразумеваю, что я не вижу никакой полезности взамен первых/последних записей о физическом упорядочении таблицы, поскольку это связано с вашими данными.Если это то, что определены First/Last, то это, похоже, сильно противоречит всем принципам SQL, о которых я знаю. –