Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
Есть таблица table(id, имя)
Как в MS SQL Management сделать, чтобы при добавлении нового имя id присваивался соответствующий порядковый номер?

Как делал я. На id ставил тип int и NOT NULL. Спецификация идентификатора: Начальное значение идентификатора =1, Шаг приращения идентификатора = 1.

При добавлении имени, id приращивался на 1, все было нормально.
id | имя |
----------
1  | aa  |
2  | bb  |
3  | fs   | 
4  | sa  |
----------

Когда я удалил sa, получилось:
id | имя |
----------
1  | aa  |
2  | bb  |
3  | fs   | 
----------

Всё гуд. Но когда добавил новой имя, то id стал равен 5
id | имя |
----------
1  | aa  |
2  | bb  |
3  | fs   | 
5  | sa  |
----------

Т.е. уже не по порядку. Получается мой способ не подходит для присвоения порядкового номера.
Как правильно тогда организовать присвоение id порядкового номера?
22 дек 14, 19:15    [17036386]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
JeStone
Member

Откуда:
Сообщений: 248
jaketaylor,

порядковый номер не надо хранить в БД, его надо вычислять при выборке
22 дек 14, 19:17    [17036397]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
Может есть такой тип поля?
22 дек 14, 19:18    [17036398]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
JeStone
Member

Откуда:
Сообщений: 248
jaketaylor,

нет
22 дек 14, 19:20    [17036408]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
JeStone,
Судя по всему вы использовали IDENTITY. Если какое-то число было использовано, то оно не возвращается. Нумерация будет с пропуском. Если вам там принципиально делать без дырок, то надо искать пропущенные значения запросом и использовать их. Но так обычно никто не делает.

Вопрос, а зачем вам это надо ?
22 дек 14, 19:27    [17036439]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
JeStone,
Как тогда потом находить взаимосвязи между таблицами?
22 дек 14, 19:27    [17036442]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
jaketaylor
JeStone,
Как тогда потом находить взаимосвязи между таблицами?


Странный вопрос. А что вы понимаете под взаимосвязями? И как пропуски в значениях могут повредить взаимосвязям?
22 дек 14, 19:30    [17036452]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
a_voronin
JeStone,
Судя по всему вы использовали IDENTITY. Если какое-то число было использовано, то оно не возвращается. Нумерация будет с пропуском. Если вам там принципиально делать без дырок, то надо искать пропущенные значения запросом и использовать их. Но так обычно никто не делает.

Вопрос, а зачем вам это надо ?

Чтобы в таблице все было попорядку, а не так:
http://saveimg.ru/show-image.php?id=79c79038dfcdcc325983d30c35de07d5
22 дек 14, 19:30    [17036453]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
a_voronin
jaketaylor
JeStone,
Как тогда потом находить взаимосвязи между таблицами?


Странный вопрос. А что вы понимаете под взаимосвязями? И как пропуски в значениях могут повредить взаимосвязям?

Никак. Надо чтобы всё было структурировано и попрядку.
22 дек 14, 19:31    [17036456]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
jaketaylor
Никак. Надо чтобы всё было структурировано и попрядку.


Зачем так надо? Ни в одно БД так не делают. Пропуски есть и никто не видит в этом проблемы.

У вас есть некая бизнес-логика завязанная на порядковые номера?
22 дек 14, 19:34    [17036471]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
a_voronin
jaketaylor
Никак. Надо чтобы всё было структурировано и попрядку.


Зачем так надо? Ни в одно БД так не делают. Пропуски есть и никто не видит в этом проблемы.

У вас есть некая бизнес-логика завязанная на порядковые номера?

Рационально и удобно - вот причины.
22 дек 14, 19:37    [17036487]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
jaketaylor
a_voronin
пропущено...


Зачем так надо? Ни в одно БД так не делают. Пропуски есть и никто не видит в этом проблемы.

У вас есть некая бизнес-логика завязанная на порядковые номера?

Рационально и удобно - вот причины.


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

Вы можете воспользоваться ROW_NUMBER() OVER (ORDER BY ...) и получить последовательность без дырок, но переприсваивать её исходным id задача странная.

В общем я лично не вижу в этом ничего рационального и удобного.
22 дек 14, 19:58    [17036615]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
jaketaylor
a_voronin
пропущено...


Зачем так надо? Ни в одно БД так не делают. Пропуски есть и никто не видит в этом проблемы.

У вас есть некая бизнес-логика завязанная на порядковые номера?

Рационально и удобно - вот причины.
Подходит мужик к таксисту, смотрит на машину и говорит:
- Слушай, а что это у тебя машина непонятного цвета?!
- И почему написано слово "ТАКСИ" неразборчиво?
- И почему шашечки неровно нарисованы?
На что таксист отвечает:
- Так вам нужны шашечки или вам надо ехать?
22 дек 14, 20:05    [17036642]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
jaketaylor
Member

Откуда:
Сообщений: 64
Mind
jaketaylor
пропущено...

Рационально и удобно - вот причины.
Подходит мужик к таксисту, смотрит на машину и говорит:
- Слушай, а что это у тебя машина непонятного цвета?!
- И почему написано слово "ТАКСИ" неразборчиво?
- И почему шашечки неровно нарисованы?
На что таксист отвечает:
- Так вам нужны шашечки или вам надо ехать?

Ну красота не помешает никогда. Я понимаю о чем вы.
22 дек 14, 20:16    [17036675]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
msLex
Member

Откуда:
Сообщений: 9308
jaketaylor
Mind
пропущено...
Подходит мужик к таксисту, смотрит на машину и говорит:
- Слушай, а что это у тебя машина непонятного цвета?!
- И почему написано слово "ТАКСИ" неразборчиво?
- И почему шашечки неровно нарисованы?
На что таксист отвечает:
- Так вам нужны шашечки или вам надо ехать?

Ну красота не помешает никогда. Я понимаю о чем вы.

Причем здесь "красота"?
У identity есть функциональное назначение - многопоточная неблокирующая генерация целочисленных значений.
Для чего вам нумерация без "дырок" вы так и не ответили (ну кроме эфемерной красоты).
Если у вас есть бизнес конкретная задача, озвучте ее.
22 дек 14, 20:26    [17036698]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
jaketaylor
Ну красота не помешает никогда. Я понимаю о чем вы.
Идите уже в дизайнеры что-ли, или художники, там вас поймут. Ну или в общество блондинок. Че вы в программисты то затесались?
Ну или теорию баз данных почитайте хотя бы. А то завтра будет: хочу чтобы в таблице записи хранились по-порядку, а то у меня почему то 1, 3, 2, а я хочу 1, 2, 3, чтобы красиво было.
22 дек 14, 20:38    [17036735]     Ответить | Цитировать Сообщить модератору
 Re: Присвоение порядкового номера в столбце таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Важна не красота, а уникальность. Неправильный акцент.
23 дек 14, 13:12    [17039482]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить