【发布时间】:2015-09-05 01:25:22
【问题描述】:
例如,假设我有一个这样的表:
CREATE TABLE people (
firstname TEXT,
lastname TEXT,
weight FLOAT,
zodiac_sign TEXT
);
前三列将有许多不同的值,随着我添加更多行,它们的数量将无限增长。但zodiac_sign 始终是 12 个值之一。
我假设 SQLite 将为 'sagittarius' 的每个实例使用 11 个字节(即它不够聪明地推断 zodiac_sign 基本上是一个可以存储在单个字节中的枚举)。
这是否表明,如果我要处理的行数不小,我应该像这样拆分另一个表:
CREATE TABLE people (
firstname TEXT,
lastname TEXT,
weight FLOAT,
zodiac_id INTEGER NOT NULL REFERENCES zodiac_signs(zodiac_id)
);
CREATE TABLE zodiac_signs (
zodiac_id INTEGER PRIMARY KEY,
name TEXT
);
对于包含少量不同值但不受某些永远不会改变的值集的文本列来说,这仍然是一个好习惯吗?例如如果我有一个出生国家的列。
【问题讨论】:
-
是的,这通常是公认的“正确”的做事方式。
标签: sql sqlite optimization database-design