我有一张桌子:
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个学生将其保持为整数列意味着查询更快,但使用更多空间并使用外键意味着使用的空间更少,但查询速度更慢。
不确定这是否正确?
所以我想我会把它扔出去!
答案 0 :(得分: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约束更有效。
答案 1 :(得分:1)
无需规范分数值。
这是一个值,它属于第一个表。
那会创建一个不需要的链接(到一个整数),这不会真正影响每个说法的性能,但它会影响可读性。