2

私はテーブルを持っています:

  CREATE TABLE pupils (
     id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
     name TEXT, surname TEXT, address TEXT, score INTEGER
  );

ここscoreで、はパーセンテージです。

そこに整数値を含めるか、このような単なるテーブルであるテーブルへの外部キーを含める方が効率的ですか?

  CREATE TABLE score (percentage INTEGER PRIMARY KEY NOT NULL);

明らかに、テーブルには0〜100が入力されます。

私の考えでは、1000人の生徒がいる場合、整数列として保持するとクエリは高速になりますが、使用されるスペースが多いほど、外部キーを使用すると使用されるスペースは少なくなりますが、クエリは遅くなります。

これが正しいかどうかわかりませんか?

だから私はそれをそこに捨てると思いました!

4

2 に答える 2

2

FOREIGN KEYを使用してテーブルのscore値を保護する場合でも、にスコア列を含める必要があります。両方のテーブルに列がないと、FOREIGNKEY関係を持つことはできません。pupilspupils

FOREIGN KEYの唯一の利点は、score列で許可される値を1〜100の整数に制限できることです。ただし、余分なものを必要とせずに、列にCHECK制約を設定しても同じことができます。テーブル。

FOREIGN KEYを使用する場合、DDLは次のようになります。

CREATE TABLE pupils (
 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
 name TEXT, surname TEXT, address TEXT, score INTEGER REFERENCES score(percentage)
);

スコア列はまだそこにあることに注意してください。

この場合、FOREIGN KEYアプローチは、テーブル全体と、維持する必要のある2つのインデックスを追加します。1つのテーブルとCHECK制約を使用する方がはるかに効率的です。

于 2012-11-06T16:38:23.233 に答える
1

スコアの値を正規化する必要はありません。

これは値であり、最初のテーブルに属します。

これにより、(整数への)不要なリンクが作成され、パフォーマンスには実際には影響しませんが、読みやすさに影響します。

于 2012-11-06T16:33:46.703 に答える