unique-yet-simple идентификаторы всей базы данных в SQL Server

Отредактируйте ваш основной класс, как показано ниже, и удалите все @CrossOrigin из контроллеров.

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
@EnableOAuth2Sso
public class MongoTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MongoTestApplication.class, args);
    }

 @SuppressWarnings("deprecation")
    @Bean
        public WebMvcConfigurer corsConfigurer()
        {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedMethods("GET", "PUT", "POST", "DELETE", "OPTIONS");
                }    
            };
        }
}
47
задан Community 23 May 2017 в 12:15
поделиться

11 ответов

Для почему бы не использования идентификационных данных на всех таблицах но какое-либо время, Вы представляете его пользователю, просто лавируете на единственном символе для типа? например, O1234 является порядком, D123213 является доставкой и т.д.? Тем путем Вы не должны проектировать некоторую сумасшедшую схему...

56
ответ дан Matt Rogish 26 November 2019 в 19:38
поделиться

Обработайте это в пользовательском интерфейсе - добавляет букву префикса (или буквы) на Идентификационный номер при создании отчетов об этом пользователям. Таким образом, o472 был бы порядком, b531 будет счетом и так далее. Люди являются довольно удобными буквами смешивания и цифрами при предоставлении "чисел" по телефону, и более точны, чем с прямыми цифрами.

13
ответ дан MarkusQ 26 November 2019 в 19:38
поделиться

Вы могли использовать столбец автоприращения для генерации уникального идентификатора. Затем имейте вычисляемый столбец, который принимает значение этого столбца и предварительно ожидает его с фиксированным идентификатором, который отражает, что тип объекта, например, OR1542 и DL1542, представил бы порядок № 1542 и доставку № 1542, соответственно. Ваш префикс мог быть расширен так, как Вы хотите, и формат мог быть расположен, чтобы помочь distiguish между объектами с тем же автоинкрементным значением, сказать OR011542 и DL021542, при этом префиксами был OR01 и DL02.

12
ответ дан tvanfosson 26 November 2019 в 19:38
поделиться

Я реализовал бы путем определения универсальной корневой таблицы. Из-за отсутствия лучшего вызова имени это Объект. Таблица Entity должна иметь как минимум единственный столбец Identity на нем. Вы могли также включать другие поля, которые распространены через все Ваши объекты или даже метаданные, которые говорят Вам, что эта строка является порядком, например.

Каждый Ваш фактический Порядок, Доставка... таблицы будут иметь ссылку FK назад на таблицу Entity. Это даст Вам единственный столбец уникального идентификатора

Используя семена, по-моему, плохая идея и та, которая могла привести к проблемам.

Править

Некоторые проблемы Вы уже упомянули. Я также вижу этот являющийся болью, чтобы отследить и гарантировать, чтобы Вы установили все новые объекты правильно. Вообразите разработчика, обновляющего систему два года с этого времени.

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

3
ответ дан JoshBerke 26 November 2019 в 19:38
поделиться

Вы могли создать ведущее устройство UniqueObject таблица с Вашими идентификационными данными и полем подтипа. Подтаблицы (Заказы, Пользователи, и т.д.) имели бы FK к UniqueObject. INSTEAD OF INSERT триггеры должны свести боль к минимуму.

0
ответ дан Mark Brackett 26 November 2019 в 19:38
поделиться

Проект намеренного программирования MS имел систему GUID-to-word, которая давала произносимые имена из случайных идентификаторов

3
ответ дан BCS 26 November 2019 в 19:38
поделиться

Мы столкнулись с похожей проблемой в проекте. Мы решили это, сначала создав простую таблицу, в которой есть только одна строка: BIGINT, установленный в качестве идентификатора автоинкремента. И мы создали sproc, который вставляет новую строку в эту таблицу, используя значения по умолчанию и внутри транзакции. Затем он сохраняет SCOPE_IDENTITY в переменной, откатывает транзакцию и затем возвращает сохраненное SCOPE_IDENTITY .

Это дает нам уникальный идентификатор внутри базы данных без заполнения таблицы.

Если вы хотите узнать, к какому объекту относится идентификатор, я потеряю откат транзакции, а также сохраню тип объекта рядом с идентификатором. Таким образом, выяснить, к какому объекту относится идентификатор, остается только один выбор (или внутреннее соединение).

1
ответ дан 26 November 2019 в 19:38
поделиться

Я использую алгоритм высокого / низкого для этого. Я не могу найти описание для этого онлайн, хотя. Об этом должен быть блог.

В моей базе данных есть таблица идентификаторов с полем счетчика. Это самая высокая часть. В моем приложении у меня счетчик от 0 до 99. Это самая низкая часть. Сгенерированный ключ имеет значение 100 * high + low.

Чтобы получить ключ, я делаю следующее

initially high = -1
initially low = 0

method GetNewKey()
begin
  if high = -1 then
    high = GetNewHighFromDatabase

  newkey = 100 * high + low.
  Inc low
  If low = 100 then
    low = 0
    high = -1

  return newKey
end

Реальный код более сложен с блокировками и т. Д., Но это общая суть.

Существует несколько способов. получения высокого значения из базы данных, включая ключи auto inc, генераторы и т. д. Лучший способ зависит от того, какую базу данных вы используете.

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

1
ответ дан 26 November 2019 в 19:38
поделиться

Может быть вариант itemType-year-week-orderNumberThisWeek?

o2009-22-93402

Такой идентификатор может состоять из нескольких значений столбца базы данных и просто отформатирован программным обеспечением в виде идентификатора.

0
ответ дан 26 November 2019 в 19:38
поделиться

Почему бы не простое представление Bigint в Base36? http://en.wikipedia.org/wiki/Base_36

3
ответ дан 26 November 2019 в 19:38
поделиться

I had a similar situation with a project.

My solution: By default, users only see the first 7 characters of the GUID.

It's sufficiently random that collisions are extremely unlikely (1 in 268 million), and it's efficient for speaking and typing.

Internally, of course, I'm using the entire GUID.

0
ответ дан 26 November 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: