4

何千ものレコードを含むテーブルがあり、それぞれに「Region」フィールドがあり、「North America」、「South America」、「Asia」などの 6 つの値のうちの 1 つしか持てません。別のテーブル「地域」を作成し、元の DB の地域フィールドを新しいテーブルに外部キーとして指定すると、DB は減少しますか?

4

2 に答える 2

2

地域文字列は 1 文字あたり 1 バイトで保存されますが、小さな数字は 1 バイトで保存できます。したがって、データベースのサイズは実際に減少します。

(保存される理論上のバイト数は で決定できますが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 に答える