1

我的网站有一个电影数据库,我正在重新设计它以提高效率。

movies表有一个名为 的字段countries。此时,这些值varchar使用 csv 存储在 中。例如:

Spain,France,Germany

这是非常无能的。例如,很难从中选择所有电影France

我不能使用 aset因为有超过 64 个不同的国家。我可以制作一张国家表和另一个id_countryid_movie. 但随后我需要制作另一个join来获取电影数据(就像我对演员或导演所做的那样)。

有什么建议么?哪个可能是存储国家信息的最佳方式?

4

2 回答 2

3

从我的角度来看,一个 SET(这是一个非标准化的解决方案)使事情变得更加复杂。

使用 JOIN 不是“复杂性”,它是数据库的目的和擅长的。

如果您需要维护元素的定义顺序,则必须在该查找表中添加一个额外的“排序”列。

于 2012-06-02T07:13:19.633 回答
1

存储国家/地区的最佳方式是在国家/地区表中。包括 ISO 3166 国家代码。将 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 回答