如何简化下表并进行优化?

时间:2010-04-12 15:13:33

标签: php mysql database database-design

现在我有一个包含以下字段的表

id  
country     
hdate   
religions   
season  
description     
link    
rate

并且我将数据存储在此表中,我的样本数据将是

1  Afghanistan  2008-01-19 Islamic Winter  Ashura ashura 2
2  Afghanistan  2008-03-20 Islamic Winter Mouloud (Birth of the Prophet) mouloud 4
3  Afghanistan  2008-01-01 Common Winter  New Year Day  new-year    5
4  Albania  2008-04-28 Christian Spring Orthodox Easter Monday easter-monday 4
5  Albania  2008-01-01 Common Winter  New Year Day  new-year    5

在这里你可以看到有数据冗余,所以我决定打破桌面并带来一些常识。

我已经创建了草稿,但我无法最终确定如何才能实现最佳数据结构。

我决定将所有国家纳入一个表格

并将所有假期数据分成一个表(id,holiday,celebrated_by,religions season link rate)celebrated_by存储以逗号分隔的国家/地区的ID

和holiday_dates用于存储假日的日期。 (holiday_id,date,year)日期存储完整日期和年份仅存储年份为2009,2008等。

现在我要列出特定国家/地区的所有假期,列出庆祝同一假期的国家(列出假期时)等。

请建议我这个结构是否足够,或者是否有任何缺陷或任何变化。

帮帮我

3 个答案:

答案 0 :(得分:1)

你应该有两个(或三个)表。一个用于国家,一个用于假期。如果超过1个宗教共享同一个假期,我建议甚至为宗教增加第三个。后者可以有一个外键,将其链接到国家/地区表

countries
================
country_id  (auto increment)
name

religion
============
religion_id (auto increment)
name 

holidays
===============
holiday_id (auto increment)
date
season
description
link
rate
country_id (FK)
religion_id (FK)

如果您需要携带联接来查询,请告诉我。

答案 1 :(得分:0)

如果celebrated_by链接到国家表的唯一键,那么它很好,你可以轻松处理这个。但是假日表中会出现冗余情况

如果没有,那么你可以创建一个或者可以创建另一个链接b / w country和holiday(country_id,holiday_id)字段的表就足以排序查询并减少冗余

答案 2 :(得分:0)

建议的结构很好,除了你不应该用逗号分隔的id列表进行链接。将'celebrated_by'设为一个单独的表,其中包含字段country_id,holiday_id

从理论上讲,你可能想用参考表替换“宗教”或“季节”的直接引用(如pocketfullofcheese建议的那样),但我怀疑这会带来什么实际好处。