0

我刚刚阅读了Coding Horror: Maybe Normalizing Is not Normal,他们特别说规范化会降低 SELECT 查询的性能,因为有许多INNER JOIN语句。

但是我有一个表,我打算将几个 TEXT 列放在单独的表中,这样我就可以比较整数索引而不是字符串,但是现在我阅读了这篇文章,我不确定是否应该这样做。

例如,如果我们比较这个非规范化表:

CREATE TABLE addresses (country TEXT, city TEXT, address TEXT);
SELECT address FROM addresses WHERE Country=? AND City=?;

使用规范化形式:

CREATE TABLE countries (name TEXT UNIQUE);
CREATE TABLE cities (name TEXT UNIQUE);
CREATE TABLE addresses (country INT, city INT, address TEXT);
SELECT addresses.address FROM addresses INNER JOIN countries ON countries.ROWID=addresses.country INNER JOIN cities ON cities.ROWID==addresses.city WHERE countries.name=? AND cities.name=?;

第二种形式是更慢、更快还是与 SQLite 的第一种形式速度相同?

4

1 回答 1

2

大多数人不知道标准化是什么意思。

如果您要求每个表中的每一行都有一个 ID 号,并且您使用这些 ID 号作为外键,那么您需要进行大量连接才能获得有用的信息。(从这个意义上说,身份证号码不是有用的信息。)

但规范化与识别依赖关系和投射新关系有关。规范化与 ID 号没有任何关系。

在您的表格中,您将文本替换为 ID 号。那不是标准化。那只是用 ID 号替换文本。

在大多数情况下,文本将比 ID 号和连接执行得更好。我自己对此进行了测试,并在 stackoverflow.com 和 dba.stackexchange.com 上多次写过它。

于 2013-06-17T13:08:50.343 回答