2010-07-31 130 views
1

我正在制作在线日历。数据库表格规范化问题

一个将能够创建en事件,然后有可能选择添加“无限”或“从”到“结束”日期时间。如果您选择添加“从”到“结束”,您可以选择不重复或每天,每周或每月重复一次。

我想知道创建这些关系的最佳方式是什么。

这里是我的表我有现在:

Table: Events 
Columns: name, description, date_time (foreign key) 

Table: Date_time 
Columns: from, to, repeat (foreign key) 

Table: Repeat 
Columns: mode, days 
1: "daily", "every 2nd day" 
2: "weekly", "Monday, Wednesday" 
3: "monthly", "1st, 12th, 19th" 

有了这个,我会遇到一些问题。

这里我必须指定一个Events.date_time,因为它有一个外键约束。我如何让用户选择不指定任何日期时间,只需将其设置为无限。

对于重复也是如此。如果用户设置了日期时间,我想给出将重复设置为无的可能性。

有人可以指引我进入正确的方向。

感谢

+0

你可以发布你使用的DDL吗?通常外键不需要指定它们... – 2010-07-31 11:08:30

+0

我不知道DDL的含义。我安装了Mysql,并使用SQL进行即时通讯。 – 2010-07-31 12:06:20

+0

创建表的SQL语句:) – 2010-07-31 12:15:45

回答

2

我会建议重新考虑架构,我的建议是这样的:

编辑:,因为事件可能有不超过一个周期,它是更好地使用作为列,如果它们为null,则事件无限有效。

Table: Events 
Columns: id, name, description, from (nullable), to (nullable) 

Table: Repeat 
Columns: mode, days, event_id (foreign key to Event) 
1: "daily", "every 2nd day" 
2: "weekly", "Monday, Wednesday" 
3: "monthly", "1st, 12th, 19th"