Как я могу сохранить свои столбцы личности без пробелов? - PullRequest
1 голос
/ 05 января 2012

У меня есть база данных с записями M +2, проблема в том, что мне пришлось удалить около 10 000, и теперь я получил эту проблему, идентификаторы будут отсутствовать, например,

ID: 100
ID: 102
ID: 103
...

Какорганизовать это?То есть заменить все последующие идентификаторы, чтобы не было «дыр»?Помните, у меня более 2 миллионов записей (на 15 000 больше в день), вручную это невозможно.

Мне нужно:

ID: 101
ID: 102
ID: 103
...

Ответы [ 2 ]

4 голосов
/ 05 января 2012

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

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

Если вас это беспокоит, почему бы просто не добавить битовое поле isDeleted и пометить записи, вместо того, чтобы фактически удалить их.Вуаля, без пробелов!

Если вам абсолютно необходим инкрементный номер (например, номер строки), то просто сделайте это в своих запросах , чтобы вам не пришлось возиться с проблемой сохраненияЭто.

0 голосов
/ 05 января 2012

Вы можете обнаружить, что все записи хранятся в исходной таблице, а затем INSERT - во вторичной таблице, если вы уверены, какие из них соответствуют требованиям. Это обычно довольно просто:

INSERT INTO b_table (a, b, c) SELECT a, b, c FROM a_table

Если у вас есть поле идентификатора автоинкремента, вы просто оставляете его с обеих сторон, и оно воссоздает его на стороне b_table, последовательно, без пропусков. Вы можете удалить записи из a_table, когда закончите с ними, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...