akinwunmi Ответов: 1

Как я могу привести свою базу данных в порядок после удаления экзаменационных вопросов в форме C # windows


Добрый день, пожалуйста, я создаю приложение cbt, все, что я удаляю вопрос и вставляю другой вопрос, его идентификатор не уменьшается. Например, у меня есть 10 вопросов после его удаления, я ожидаю, что следующие вопросы, которые я вставляю, должны начинаться с 1, но они начинаются с 11. Пожалуйста помочь

Что я уже пробовал:

Я искал в сети, но не нашел ответа

PIEBALDconsult

0) не удаляйте.
1) не использовать идентификационные поля.

Dave Kreskowiak

Если вы используете identity или autoincrement как что-то для поддержания порядка элементов, вы делаете это неправильно. Порядок элементов должен быть отдельным полем в виде целого числа или чего-то подходящего.

Значения идентификаторов автоинкремента не перерабатываются и не используются повторно.

1 Ответов

Рейтинг:
2

OriginalGriff

Из вашего описания следует, что вы используете столбец идентификаторов - это ожидаемое поведение, и это на самом деле то, что вы хотите, чтобы произошло. Проблема в том, что вы предполагаете, что ir представляет собой систему нумерации строк, когда вместо этого он представляет уникальное значение идентификатора для каждой строки.

База данных не "перерабатывает" значения идентификаторов, потому что она не "знает", для чего вы их используете, - поэтому она предполагает, что вы ссылаетесь на эти значения из других мест и других данных. Если он переработает их, то старые данные будут эффективно прикреплены к новым строкам,и это может быть очень плохо. Представьте себе систему выставления счетов, в которой покупки для другого, удаленного клиента привязываются к вашему новому клиенту, и с вас за них взимается плата!

В то время как можно сбросить поле идентификации:

DBCC CHECKIDENT('mYTable', RESEED, 1)

Вообще-то это плохая идея.

Поэтому не используйте его как номер строки: вместо этого используйте ROW_NUMBER:
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS RowNumber, ID, QuestionText FROM MyTable


akinwunmi

Спасибо, это означает, что я должен создать столбец для идентификатора, но что делать, если пользователь ошибочно вводит тот же идентификатор?

OriginalGriff

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

akinwunmi

Выберите функции row_number() над (приказ по ID по возрастанию), как функция rownumber, удостоверение личности, QuestionText из mytable
пожалуйста, куда я собираюсь вставить этот код