存储大于64的SET的最佳方法

时间:2012-06-01 10:41:08

标签: mysql database database-design

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

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

Spain,France,Germany

这非常有用。例如,很难从France中选择所有电影。

我无法使用set,因为有超过64个不同的国家/地区。 我可以制作一个国家/地区表和另一个将id_countryid_movie相关联的表格。但是接下来我需要制作另一个join来获取电影数据(就像我和导演o导演一样)。

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

2 个答案:

答案 0 :(得分:3)

从我的观点来看,SET(这是一种非规范化的解决方案)使事情变得更加复杂。

使用JOIN不符合"复杂性",它是为数据库制作和擅长的数据库。

如果您需要维护元素的已定义顺序,则必须添加额外的"排序"列到该查找表。

答案 1 :(得分: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),
  ...
);

大多数情况下,您可能不需要进行加入,因为人们可以记住国家/地区代码。