具有多个值的实体属性

Entity's attribute with multiple values

我正在为我的网站设计一个数据库,其中我有一个具有 frequency 属性的 goal 实体,其中包括 dailyweeklymonthly, 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 放到一个 table 中,它引用了另外 4 个 table 吗? 谢谢你,对不起我的英语不好。

在我看来,您有 2 个选择:

1) 维护 1 table 称为目标并具有频率、年份、开始、结束列。 然后,您将把所有数据集中在一个 table.

id      frequency      year     start      end
1         daily        null     Monday      Friday 

2) 在目标 table

中引用另一个 table 调用频率

如果您将有 4 个 table 从目标 table 引用,您应该在目标 table 中添加 4 个外键,然后保留 4 个 table,每个外键一个频率:

goal_id    freq_daily_fk   freq_week_fk   freq_month_fk   freq_year_fk

   1            null           2                null           null

据我所知,您想用不同的频率和特定于频率的属性对目标进行建模。这听起来像是超类型-子类型模式。

您可以有一个目标 table 具有任何共同属性,包括频率指示器:

goals (goal_id PK, frequency)

和 tables 用于子类型信息:

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)

子类型 tables 的一个常见要求是强制互斥。如果需要,您可以通过在每个子类型中包含频率来执行此操作,以便可以指定 (goal_id, frequency) 的外键约束。