Одно требование состоит в том, что при сохранении моих объектов C # в базе данных я должен определить идентификатор базы данных (суррогатный первичный ключ) в коде.
Вторым требованием является то, что тип базы данных для ключа должен быть int или char (x) ... поэтому не нужно иметь уникальный идентификатор или двоичный код (16) или тому подобное.
Это неизменные требования.
Как лучше всего справиться с этим?
Одной из идей является GUID в кодировке base64, который выглядит как "XSiZtdXcKU68QWe7N96Dig". Они легко создаются в коде и, если необходимо, приемлемы для URL. Но будет ли это слишком дорого с точки зрения производительности (индексации, размера), когда все первичные и внешние ключи будут char (22)? Мне очень нравится эта идея.
Другой идеей было бы создать кодовую версию последовательности базы данных, создав для меня увеличенные целые числа. Но я не знаю, насколько это правдоподобно, и потребуется какое-то руководство для обеспечения надежности. Секвенсор должен знать, насколько далеко он продвинулся и что с потоками, которые я не контролирую и т. Д.
Я полагаю, что ни одна из задействованных таблиц никогда не будет превышать 1.000.000 строк ... вероятно, будет намного меньше.