Создание таблицы SQL для хранения идентификаторов, чтобы избежать объединения строк - PullRequest
0 голосов
/ 21 апреля 2019

В настоящее время у меня есть 3 таблицы:

  • sequences (десятки тысяч записей),
  • pim (сотни записей) и
  • rl (сотни записей)

Эти таблицы - самая горячая часть системы, получение наибольшего использования и скорость важны.pim & rl - это имена тестов, которые связаны с таблицей последовательностей.

Система требует, чтобы я сохранял test_class (pim, rl) где-то в этих тестовых таблицах.Чтобы объединить последовательности в тестовые таблицы, я вижу два варианта:

  1. добавить столбец test_class в таблицу последовательностей и добавить столбцы test_class & test_id в соответствующую тестовую таблицу (т. Е. Test_class в последовательностях сзначение "pim", а затем test_class в таблице тестов pim со значением "pim") и соединение между последовательностями и pim с использованием test_class и test_id или

  2. создать четвертую таблицу test_index, который просто имеет столбец идентификации test_id и столбец test_class.ограничьте каждую тестовую таблицу только использованием test_id, где тестовый класс соответствует этой таблице.добавить столбец test_id в последовательности и в таблицы pim & rl.последовательности внутреннего соединения с test_index, а затем левое соединение с pim и левое соединение с rl, чтобы получить все тесты для последовательности.

Обе опции кажутся запутанными.Я склоняюсь к варианту (b), потому что - AFAIK соединение по int всегда должно быть быстрее, чем соединение по строкам, и, поскольку это горячая часть системы, мне нужно снижение производительности.Кто-нибудь видит лучший способ решить эту проблему?

Опция (1):

последовательность

sequence_test_id int PK
sequence_id int
test_id int
test_class str (vals: pim, rl)

pim

test_id int PK
test_class str (vals: pim)
...test params ...

rl

test_id int PK
test_class (vals: rl)
...test params ...

-> левые последовательности соединения с каждой тестовой таблицей в test_id & test_class

Option (2)

последовательности

sequence_test_id int PK
sequence_id int
test_id int

test_index

test_id int PK
test_class str (vals:pim, rl)

pim

test_id int PK FK >- test_index.test_id
...test params ...

rl

test_id int PK FK >- test_index.test_id
...test params ...
  • -> таблица ограничений pim для использования только test_id из test_index с test_class = 'pim'

  • -> левые последовательности соединений для test_index для test_id, затем левое соединение для каждой тестовой таблицы в test_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...