具有多个值的实体属性

时间:2015-08-11 04:51:08

标签: database database-design relational-database

我正在为我的网站设计一个数据库,其中有一个goal实体,其frequency属性包括dailyweeklymonthlyyearly值。问题是每个值都有另一个多个值,如下所示

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个表的表中吗? 谢谢,抱歉我的英语不好。

2 个答案:

答案 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)上的外键约束。