我正在为我的网站设计一个数据库,其中有一个goal
实体,其frequency
属性包括daily
,weekly
,monthly
,yearly
值。问题是每个值都有另一个多个值,如下所示
goal
|-- frequency
|-- daily
|-- start day
|-- end day
|-- weekly
|-- year
|-- start week
|-- end week
|-- monthly
|-- year
|-- start month
|-- end month
|-- yearly
|-- start year
|-- end year
如何创建该数据库?我可以将frequency
放到一个引用另外4个表的表中吗?
谢谢,抱歉我的英语不好。
答案 0 :(得分:0)
我认为你有两种选择:
1)维护1个名为goal的表,并有频率,年份,开始,结束列。 然后,您将在一个表中包含所有数据。
id frequency year start end
1 daily null Monday Friday
2)在目标表中引用另一个名为frequency的表
如果您将从目标表中引用4个表,则应在目标表中添加4个外键,然后保留4个表,每个频率对应一个:
goal_id freq_daily_fk freq_week_fk freq_month_fk freq_year_fk
1 null 2 null null
答案 1 :(得分:0)
据我所知,您希望使用不同的频率和频率特定属性来建模目标。这听起来像是超类型子模式。
您可以拥有一个包含频率指示器的任何常见属性的目标表:
goals (goal_id PK, frequency)
和子类型信息表:
daily (goal_id PK/FK, start_day, end_day)
weekly (goal_id PK/FK, year, start_week, end_week)
monthly (goal_id PK/FK, year, start_month, end_month)
yearly (goal_id PK/FK, start_year, end_year)
子表格的一个共同要求是强制互斥。如果需要,您可以通过在每个子类型中包含频率来执行此操作,以便可以指定(goal_id,frequency)上的外键约束。