当我关于数据库并且我遇到问题时,我真的很初学。
我有一个包含很多行的表。每行都有一个名为MY_KEY的主键。 MY_KEY是CHAR(20)。
我有另一张桌子。其中一个字段中的每一行将有多个MY_KEY按空格分隔并存储为TEXT,但两次从不相同的MY_KEY。
我不确定我是否解释得这么好,但我如何设计这两个表以提高性能效率呢?
我的程序将采用TEXT并将其添加到矢量中,然后二进制搜索它。如果有1000个20个字符MY_KEY,这将会很慢。
答案 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)
查看有关数据库规范化的一些读数。基本思想是您不希望任何列存储多个数据。虽然这不是一个绝对的规则,但这是一个很好的经验法则,并且可能比你所描述的更有效。
不要使用一堆关联键,而应考虑使用一对关联键的行。这是在关系数据库中表示多对多关系的一种更好的方法。您可以执行联接以检索数据。