0

我有一个匿名表,其中包含三列(Title,Tough,Id),其中只能输入八个不同的艰难值。现在我想知道他们是否需要为我的数据库中的每个艰难值创建 8 个不同的表快速 SQL 查询。

4

4 回答 4

0

我应该做的是以下(假设 Type 是 a VARCHAR

创建一个具有两列(typeId, type)的新表。然后引用您的匿名表。这减少了您的数据存储,您只需捕获 8 个值一次。然后你只使用数字来引用这 8 个值。

我不确定这是否会提高您的查询性能,但这肯定会使您的数据库包含更少的冗余数据。

于 2012-05-04T08:08:26.383 回答
0

您应该创建一个Types包含 和 列的表,type_idtype_name不是创建另一个包含 、 和 列anonymous_idtitletype_id

在第二个表中,type_id将是链接到 table 的主键 (type_id) 的外键Types

这样一来,您的表得到优化并包含更少的重复数据,并且您可以只允许那些已经在数据库中的类型,从而更具可扩展性。

于 2012-05-04T08:09:18.160 回答
0

我建议你继续使用一个表,看看 if 是如何工作的。它将简化您的应用程序结构,并且不会妨碍您查看不同的问题。

但是,如果您在截止日期前,那么您应该考虑您的应用程序结构以及索引将如何增长。如果更改您的应用程序太痛苦,那么您应该快速重做,直到它变成无法解决的问题。

于 2012-05-04T08:13:32.637 回答
0

通常,您应该尝试规范化您的数据结构,并在测量表明您需要时担心性能。

CREATE TABLE `Anonymous` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `tough_id` INT NOT NULL,
    `title` VARCHAR(64),
    PRIMARY KEY (`id`),
    KEY `idxTough` (`tough_id`)
);

CREATE TABLE `Tough` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64) NOT NULL,
    PRIMARY KEY (`id`)
);

INSERT INTO `Tough` (`name`) VALUES ('ToughA'), ('ToughB'), ('ToughC'), ('ToughD');

INSERT INTO `Anonymous` (`title`, `tough_id`) VALUES
    ('Anon with tough A', 1),
    ('Anon with tough B', 2),
    ('Anon with tough C', 3),
    ('Anon with tough D', 4)
;
于 2012-05-04T08:39:42.000 回答