这种情况下的MySQL数据库

时间:2013-12-21 02:07:52

标签: mysql

当我关于数据库并且我遇到问题时,我真的很初学。

我有一个包含很多行的表。每行都有一个名为MY_KEY的主键。 MY_KEY是CHAR(20)。

我有另一张桌子。其中一个字段中的每一行将有多个MY_KEY按空格分隔并存储为TEXT,但两次从不相同的MY_KEY。


我不确定我是否解释得这么好,但我如何设计这两个表以提高性能效率呢?

我的程序将采用TEXT并将其添加到矢量中,然后二进制搜索它。如果有1000个20个字符MY_KEY,这将会很慢。

2 个答案:

答案 0 :(得分:2)

不要在数据库中存储分隔值!通过引入多对多表来规范化您的数据。

  

你能告诉我改进这种设计的方法吗?

您的架构可能类似于

CREATE TABLE table1 
(
  table1_key CHAR(20) NOT NULL PRIMARY KEY,
  -- other columns
);

CREATE TABLE table2
(
  table2_key CHAR(20) NOT NULL PRIMARY KEY,
  -- other columns
);

CREATE TABLE table2_table1 
(
  table2_key CHAR(20), 
  table1_key CHAR(20),
  PRIMARY KEY (table2_key, table1_key),
  FOREIGN KEY(table2_key) REFERENCES table2 (table2_key),
  FOREIGN KEY(table1_key) REFERENCES table1 (table1_key)
);

这是 SQLFiddle 演示

答案 1 :(得分:1)

查看有关数据库规范化的一些读数。基本思想是您不希望任何列存储多个数据。虽然这不是一个绝对的规则,但这是一个很好的经验法则,并且可能比你所描述的更有效。

不要使用一堆关联键,而应考虑使用一对关联键的行。这是在关系数据库中表示多对多关系的一种更好的方法。您可以执行联接以检索数据。