2

我有一张桌子:

  CREATE TABLE pupils (
     id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
     name TEXT, surname TEXT, address TEXT, score INTEGER
  );

其中score是百分比。

将整数值放入其中或将外键放入像这样的表中是否更有效?

  CREATE TABLE score (percentage INTEGER PRIMARY KEY NOT NULL);

显然,该表将填充 0-100。

我的想法是,如果您有 1000 名学生,将其保留为整数列将意味着查询速度更快,但使用的空间更多,使用外键意味着使用的空间更少,但查询速度更慢。

不确定这是否正确?

所以我想我会把它扔在那里!

4

2 回答 2

2

如果你使用 FOREIGN KEY 来保护表score中的值pupils,你仍然需要在pupils. 如果没有两个表中的列,就不能有 FOREIGN KEY 关系。

FOREIGN KEY 的唯一优点是它可以让您将score列中允许的值限制为 1 到 100 之间的整数。但是,可以在列上使用 CHECK 约束来完成相同的操作,而无需额外的桌子。

如果您使用 FOREIGN KEY,您的 DDL 将如下所示:

CREATE TABLE pupils (
 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
 name TEXT, surname TEXT, address TEXT, score INTEGER REFERENCES score(percentage)
);

请注意,分数列仍然存在。

在这种情况下, FOREIGN KEY 方法添加了一个必须维护的整个表和两个索引。使用一个表和一个 CHECK 约束要高效得多。

于 2012-11-06T16:38:23.233 回答
1

不需要标准化 score 的值。

这是一个值,它属于第一个表。

这将创建一个不需要的链接(到一个整数),这不会真正影响性能,但会影响可读性。

于 2012-11-06T16:33:46.703 回答