如何在关系数据库中表示一组值

时间:2013-05-07 14:40:06

标签: sql database-design

假设我有一些类别的值,例如体育活动。

值可能是:

  1. 运行
  2. 篮球
  3. 足球
  4. 冰上曲棍球
  5. 步行
  6. 棒球
  7. 篮球
  8. 现在让我们假设我有一大群人。每个人都参加一年中每个季节的一系列体育活动。所以A人可能会在冬天打篮球和跑步,打棒球并在春夏季跑步,踢足球并在秋季跑步。 B组可能会在春季,秋季和夏季走路和跑步,并在冬季打篮球和冰球等。

    换句话说,每个人每季有一套(或阵列)体育活动(称之为最喜欢的活动点)。

    我想弄清楚的是将这些值集合有效地映射到关系数据库中的个人的最佳方法。我假设我将有一张桌子和一张体育活动表。但是,如何从体育活动表中表示重叠的值集并将它们映射到人员表中的各个人?

3 个答案:

答案 0 :(得分:3)

您将活动映射到某人。您的表将引用活动和人员,主键将是这两者的组合。

person <----- personActivity -----> activity

如果你想加入季节:

person, activity, season

personActivitySeasn

答案 1 :(得分:1)

你也会有一个季节表(可能只有四个值)。然后你会得到一个表PersonActivitySeasons,其中包含以下列:

  • PersonActivitySeasonId
  • PERSONID
  • SeasonId
  • ActivityId
  • 活动日期

这是最规范化的格式。在实践中,您也可以制作季节专栏:

  • PersonActivitySeasonId
  • PERSONID
  • ActivityId
  • IsWinter
  • IsSpring
  • IsSummer
  • IsAutumn

我倾向于采用第一种方法,因为我可以为每个季节的每条记录包含有效日期和结束日期,并且更容易跟踪进出活动的人员。此外,它会允许“不合格”的季节,如果这对你有用。

答案 2 :(得分:0)

您可以创建第三个表“活动”,其中包含人物ID(人员表中的PK)和运动ID(运动表中的PK)。