我应该将哪个数据库用于多值列

时间:2017-08-24 07:44:12

标签: mysql database oracle sqlite database-schema

我对数据库了解不多。我在纸上有一个表,有4或5(id为1)列。一个是主要值和单个值,而其他列是次要的,可以具有多个值。现在我有一些值,我必须在辅助列中搜索这些值并返回最高匹配的主列。即

Id        Primary        Secondary_1      Secondary_2    Secondary_3
1         ABCD           12,11,9          51,52          77
2         ABCE           9,15,17          12,14,7        71,77
3         ABEF           8,9,14,12        51,7           77,71
4         ABEG           7,9,15           52,14          77,78

辅助列可以具有字符串类型。现在假设我必须搜索(8,9,14,77) 它应该返回ABEF。如果搜索(9,51,77)它应该返回(ABCD,ABEF)等等。所以我的问题是我如何存储数据库应该使用哪种模式来解决这类问题。

1 个答案:

答案 0 :(得分:2)

您应该在主表之外创建3个表,并使用外键将其行连接到主表:

  1. 主要表格: Id,主要
  2. 辅助表1: ForeignId,Value
  3. 辅助表2: ForeignId,Value
  4. 辅助表3: ForeignId,Value
  5. 然后,在所有" ForeignId"上创建一个外键。列,与" Id"主表的列。

    当然这些专栏的名字太可怕了。不要将它们命名为“#34;价值"”,更准确。

    目标是在一个字段中包含单个值,而不是多个值。使用这种规范化设计,您可以使用简单的字符串比较查询辅助表,同时使用匹配的行连接主表行。