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