我的网站有一个电影数据库,我正在重新设计它以提高效率。
movies
表有一个名为countries
的字段。此时,值使用csv存储在varchar
中。例如:
Spain,France,Germany
这非常有用。例如,很难从France
中选择所有电影。
我无法使用set
,因为有超过64个不同的国家/地区。
我可以制作一个国家/地区表和另一个将id_country
与id_movie
相关联的表格。但是接下来我需要制作另一个join
来获取电影数据(就像我和导演o导演一样)。
有什么建议吗?哪个可能是存储国家信息的最佳方式?
答案 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),
...
);
大多数情况下,您可能不需要进行加入,因为人们可以记住国家/地区代码。