1

ウェブサイト用の映画のデータベースがあり、より効率的にするために再設計しています。

moviesテーブルには というフィールドがありますcountries。この時点で、値はvarcharcsv を使用して に保存されます。例えば:

Spain,France,Germany

これは非常に非効率的です。たとえば、 からすべての動画を選択するのは難しいFranceです。

set64 か国以上の国があるため、a を使用できません。id_country国の表と にリンクする別の表を作成できますid_movie。しかしjoin、映画のデータを取得するために別のものを作成する必要があります (俳優や監督の場合と同様)。

助言がありますか?国情報を保存する最良の方法はどれですか?

4

2 に答える 2

3

私の観点からすると、SET (正規化されていないソリューション) は物事をより複雑にします。

JOIN の使用は、「複雑さ」と見なされるものではなく、データベースが作成され、得意とするものです。

要素の定義された順序を維持する必要がある場合は、そのルックアップ テーブルに追加の「並べ替え」列を追加する必要があります。

于 2012-06-02T07:13:19.633 に答える
1

国を保存する最良の方法は、国の表にあります。ISO3166国コードを含めます。ISOコードを外部キー参照として保存すれば、ほとんどの場合、結合は必要ありません。

create table countries (
  iso_country_code char(3) primary key,
  country_name varchar(50) not null unique
);

insert into countries (country_name, iso_country_code) values
('AALAND ISLANDS', 'ALA'),
('AFGHANISTAN', 'AFG'),
('ALBANIA', 'ALB'),
...
('YEMEN', 'YEM'),
('ZAMBIA', 'ZMB'),
('ZIMBABWE', 'ZWE');

create table some_other_table_that_references_countries (
  some_key ... primary key,
  iso_country_code char(3) not null references countries (iso_country_code),
  ...
);

ほとんどの場合、人々は国コードを覚えているので、参加する必要はないでしょう。

于 2012-06-02T11:19:36.603 に答える