4

我有一张包含数千条记录的表,每条记录都有一个字段“Region”,只能有 6 个值中的一个 - “North America”、“South America”、“Asia”等。如果我创建一个单独的表“区域”并将原始数据库的区域字段作为外键指向新表,数据库会减少吗?

4

2 回答 2

2

您的区域字符串将存储为每个字符一个字节,而小数字可以存储在单个字节中。所以你的数据库大小确实会减少。

(理论上保存的字节数可以用 来确定SELECT SUM(LENGTH(Region) - 1) FROM MyTable,但是将页面划分为记录,以及存储区域表所需的额外页面会减少这一点。)

于 2013-08-10T08:15:36.050 回答
1

终于找到了答案。我原来的表:

CREATE TABLE MyTable(Region TEXT, Country TEXT, City TEXT, etc);

我第一次尝试减小尺寸(没有用):

CREATE TABLE Regions(Region TEXT);
CREATE TABLE MyTable(Region TEXT, Country TEXT, City TEXT, FOREIGN KEY (Region) references Regions(Region));

实际工作的新模式:

CREATE TABLE Regions(ID INTEGER PRIMARY KEY AUTOINCREMENT, Region TEXT);
CREATE TABLE MyTable(RegionId INTEGER, Country TEXT, City TEXT, FOREIGN KEY (RegionId) REFERENCES Regions(ID));

存储 Region 的整数值大大减少了数据库的大小。

于 2013-11-18T01:24:37.073 回答