2010-06-13 7 views
0

j'ai une ancienne base de données où je stocke les données des jours fériés et les dates où elles sont célébrées ..Quel serait le meilleur design db pour l'ancienne structure db?

id country  hdate   description  link 
1 Afghanistan  2008-01-19 Ashura   ashura 
2  Albania  2008-01-01 New Year Day new-year 

les failles dans la structure ci-dessus est que, je le répète les données autres que la date pour chaque festival et chaque année et tous les pays ..

par exemple, je stocke une nouvelle date pour 2009 pour Ashura et afghanistan ..

j'ai essayé de limiter la redondance et de diviser les tables comme

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 

Maintenant, j'ai quelques problèmes avec la structure trop ..

considèrent que je stocker les vacances comme le jour de l'indépendance, sa commune pour d'autres pays, mais il aura des dates différentes. Alors, comment gérer cela et le lien devra être différent aussi..

et je dois la liste des pays qui célèbre les mêmes vacances et aussi quand je décris à des vacances seul que je dois énumérer toutes les autres vacances pays célébrerait ..

Et surtout, J'ai déjà une énorme quantité de données dans les anciennes tables et j'ai besoin de le diviser en un nouveau une fois le nouveau design est finalisé ...

Des idées?

Répondre

1

Qu'en est-il d'avoir une relation n-n?

Tableau: Pays

  • country_id (PK)

Tableau: CountryToHoliday

  • country_id (FK)
  • Holiday_ID (FK)

Tableau: Location

  • Holiday_ID (PK)
+0

Si je fais comme ça, alors je pense que la redondance ne peut être évité. La principale chose que je voulais séparer est de réduire la redondance. Et considérer la question où je dois aller chercher les pays qui célèbrent le jour des vétérans puis j'ai comparé trois tables à nouveau .. va-t-il réduire la performance lorsque nous nous référons plus de tables? – Clewon

+0

Non, vous n'avez pas à comparer; vous pouvez interroger la table des fêtes pour l'enregistrement de la journée des vétérans et rejoindre les deux autres tables. Très simple. Il sera bon d'avoir un index sur les vacances aussi (c'est-à-dire Date) –

+0

En ce qui concerne la redondance; vous finirez par ne plus avoir de données redondantes (l'enregistrement CountryToHoliday n'existe que lorsqu'un pays a un jour férié). –

Questions connexes