В настоящее время у меня есть 3 таблицы:
sequences
(десятки тысяч записей), pim
(сотни записей) и rl
(сотни записей)
Эти таблицы - самая горячая часть системы, получение наибольшего использования и скорость важны.pim & rl - это имена тестов, которые связаны с таблицей последовательностей.
Система требует, чтобы я сохранял test_class (pim, rl) где-то в этих тестовых таблицах.Чтобы объединить последовательности в тестовые таблицы, я вижу два варианта:
добавить столбец test_class в таблицу последовательностей и добавить столбцы test_class & test_id в соответствующую тестовую таблицу (т. Е. Test_class в последовательностях сзначение "pim", а затем test_class в таблице тестов pim со значением "pim") и соединение между последовательностями и pim с использованием test_class и test_id или
создать четвертую таблицу 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