Ми працюємо над веб-додатком, ще недоступним для користувачів. Мій бос зауважив, що новостворені записи отримують ідентифікатор понад 10 000, хоча у нас є лише 100 записів. Вона припустила, що веб-інтерфейс чомусь створює в 100 разів більше тимчасових записів, ніж фактичні (і видаляє їх), і що це може привести нас до вичерпання діапазону протягом декількох місяців після виходу.
Я не думаю, що вона правдива щодо причини інфляції посвідчення особи (колега, яка може відповісти на це, знаходиться у відпустці, тому ми точно не знаємо), але припустимо, що вона є. Вона сказала, що не хоче використовувати стовпчик bigint, і що вона хотіла б, щоб ми припинили автоматичне збільшення стовпця ідентифікатора та писали код на стороні сервера, який вибирає перше "невикористане" ціле число і використовує його як ідентифікатор.
Я студент з інформатики, маючи практичний досвід, виконуючи роль молодшого розробника. Вона має багаторічний досвід управління всіма базами даних нашої організації та розробкою більшості з них. Я думаю, що в цьому випадку вона помилкова, що ідентифікатор bigint не варто боятися, і що імітуючи функціональність СУБД, пахне антипатерном. Але я ще не вірю в своє судження.
Які аргументи "за" і "проти" кожної позиції? Які погані речі можуть трапитися, якщо ми використовуємо bigint, і які небезпеки є винаходом функціональних можливостей автоматичного підвищення коліс ? Чи є третє рішення, яке краще, ніж будь-яке? Які її причини можуть бути тим, що хочуть уникнути інфляції номінальних значень? Мені теж цікаво почути про прагматичні причини - можливо, ідентифікатори bigint працюють теоретично, але викликають головні болі на практиці?
Не очікується, що програма обробляє дуже великі обсяги даних. Сумніваюсь, що вона досягне 10 000 фактичних записів протягом найближчих кількох років.
Якщо це має значення, ми використовуємо сервер Microsoft SQL. Додаток написано на C # і використовує Linq для SQL.
Оновлення
Дякую, я знайшов відповіді та коментарі цікавими. Але я боюся, що ви неправильно зрозуміли моє запитання, тому вони містять те, що я хотів знати.
Мене не дуже хвилює реальна причина високих посвідчень. Якщо ми не можемо знайти його самостійно, я можу задати інше питання. Що мене цікавить, це зрозуміти процес прийняття рішення в цій справі. Для цього слід припустити, що програма записуватиме 1000 записів на день, потім видаляючи 9999 з них . Я майже впевнений, що це не так, але в це повірив мій начальник, коли вона зробила своє прохання. Отже, за цих гіпотетичних обставин, які б були плюси і мінуси або в застосуванні bigint, або написанні власного коду, який присвоює ідентифікатори (таким чином, що повторно використовує ідентифікатори вже видалених записів, щоб переконатися у відсутності прогалин)?
Що стосується фактичної причини, я сильно підозрюю, що це тому, що ми колись писали код для імпорту даних з іншої бази даних, як доказ того, що пізню міграцію можна зробити певною мірою. Я думаю, що мій колега фактично створив кілька тисяч записів під час імпорту та пізніше видалив їх. Я маю підтвердити, чи було це насправді так, але якщо це так, то навіть не потрібно діяти.