创建一个SQL表以仅存储身份以避免字符串连接

时间:2019-04-21 15:51:05

标签: sql sql-server database-design

我目前有3张桌子,

  • sequences(成千上万条记录),
  • pim(数百条记录)和
  • rl(数百条记录)

这些表是系统中最热的部分,获得最多的使用和速度很重要。 pim&rl是序列表链接到的测试的名称。

系统要求我将test_class(pim,rl)存储在这些测试表中的某个位置。要将序列连接到测试表,我看到两个选项:

  1. 将test_class列添加到序列表,并将test_class和test_id列添加到对应的测试表(即,序列中的test_class的值为“ pim”,然后在pim测试表中的test_class的值为“ pim” ”),然后使用test_class和test_id或

  2. 在序列和pim之间进行连接
  3. 创建第四个表test_index,该表仅具有一个test_id标识列和test_class列。限制每个测试表只使用test_id,其中测试类对应于该表。在序列和pim&rl表中添加一个test_id列。内部连接到test_index的序列,然后左连接到pim,左连接到rl,以获取该序列的所有测试。

两个选项似乎都很混乱。我倾向于选项(b),因为-在整数上连接AFAIK总是比在字符串上连接快,并且由于这是系统的重要组成部分,因此我需要提高性能。有谁看到解决这个问题的更好方法?

选项(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上的每个测试表

选项(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_class ='pim'的test_index中的test_id

  • ->左连接序列到test_id上的test_index,然后左连接到test_id上的每个测试表

0 个答案:

没有答案