Уникальное ограничение на более чем 10 столбцов - PullRequest
0 голосов
/ 09 июня 2010

У меня есть имитационная модель временного ряда, которая имеет более 10 входных переменных.Число различных экземпляров моделирования будет более 1 миллиона, и каждый экземпляр моделирования генерирует несколько выходных строк каждый день.

Чтобы сохранить результат моделирования в реляционной базе данных, я разработал таблицы, подобные этой.

создать таблицу SimulationModel (

целочисленный первичный ключ simul_id,

input0 строка / цифра,

input1 строка / цифра,

...)

создание таблицы SimulationOutput (

dt первичный ключ DateTime,

целочисленный первичный ключ simul_id,

выходной числовой номер,

...)

Чтобы сделать каждую модель уникальной, я рассматриваю несколько способов, как показано ниже.

  1. накладывает уникальное ограничение на все входные данныестолбцы таблицы SimulationModel

  2. измените структуру таблицы SimulationModel, чтобы сгруппировать входные столбцы в 2 ~ 3 столбца и наложить уникальное ограничение на эти сгруппированные столбцы.(Путем создания длинного строкового значения, такого как «input0_input1_input2»)

  3. забудьте об ограничениях на стороне сервера и выполните работу на стороне приложения.

Как вы относитесь к этим вариантам?

Нет ли проблем в использовании уникального индекса для более чем 10 столбцов с миллионами строк?

Есть ли другой способ рекомендовать?

(я могу использовать postgresql)

Ответы [ 5 ]

1 голос
/ 11 июня 2010

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

1 голос
/ 10 июня 2010

Вы можете создать один «уникальный» столбец, который является хешем других столбцов, и назвать его идентификатором.

1 голос
/ 09 июня 2010

Уникальный индекс - это способ убедиться, что каждый набор входов уникален.

1 голос
/ 10 июня 2010

Создать ограничение unqiue.10 столбцов с парой миллионов строк не очень большая таблица.Кроме того, ваши тесты, вероятно, выиграют от наличия индекса для работы - или, по крайней мере, индекс не принесет никакого вреда.

1 голос
/ 09 июня 2010

Если вы создадите две таблицы для вашей модели моделирования, например, так:

Table SimulationModel {
id: integer,
...
}

Table SimulationModelInput {
simulationmodel_id: integer foreign key(SimulationModel.id),
input: string or numeric,
...
}

, тогда вы можете наложить одно ограничение (simmodel_id, input), но запрос на выбор конфигурации будет более сложным.

...