Mysql 对于旧的数据库结构,什么样的数据库设计更好?

Mysql 对于旧的数据库结构,什么样的数据库设计更好?,mysql,Mysql,我有一个旧数据库,在那里我存储了节日和庆祝节日的日期的数据 id country hdate description link 1 Afghanistan 2008-01-19 Ashura ashura 2 Albania 2008-01-01 New Year Day new-year 上述结构的缺陷在于,我重复了每个节日、每年和每个国家的日期以外的数据 例如,我为阿舒拉和阿富汗存储了200

我有一个旧数据库,在那里我存储了节日和庆祝节日的日期的数据

id  country     hdate           description     link 
1   Afghanistan     2008-01-19  Ashura          ashura
2       Albania     2008-01-01  New Year Day    new-year
上述结构的缺陷在于,我重复了每个节日、每年和每个国家的日期以外的数据

例如,我为阿舒拉和阿富汗存储了2009年的新日期

我试图限制冗余并将表拆分为

countries (id,name)

holidays (id, holiday, celebrated_by, link) 
// celebrated_by will store the id's of countries separated by ','

holiday_dates (holiday_id, date, year) 
// date will the full date and year will be as 2008 or 2009
现在我的结构也有一些问题

考虑一下,我把独立日这样的节日储存起来,这在更多的国家很常见,但会有不同的日期。因此,如何处理此问题以及链接也必须有所不同。

我需要列出庆祝同一节日的国家,当我描述一个节日时,我需要列出该国家将庆祝的所有其他节日

最重要的是,我在旧表中已经有了大量的数据,一旦新设计完成,我需要将其拆分到新表中


有什么想法吗?

建立n-n关系怎么样

表:国家

  • 国家/地区识别码(PK)
表:CountryToHoliday

  • 国家/地区ID(FK)
  • 假日标识(FK)
表:假期

  • 假日ID(PK)

如果我这样做,那么我认为冗余是不可避免的。我想拆分的主要内容是减少冗余。。考虑一下我要去那些庆祝退伍军人节的国家,然后我又比较了三张表格。当我们参考更多的表时,它会降低性能吗?不,你不必比较;您可以在假日表中查询退伍军人日记录,并连接其他两个表。很简单。最好在假期(即日期)有一个关于冗余的索引;最终,您将完全没有冗余数据(CountryToHoliday记录仅在一个国家有假日时存在)。