2013-05-07 17 views
0

假设我有一些类别的值,例如体育活动。如何表示一组关系数据库中的值

的值可能是:

  1. 运行
  2. 篮球
  3. 足球
  4. 冰球
  5. 棒球
  6. 篮球

现在让我们假设我有一大群人。每个人每年都会参加一系列体育活动。所以A人可能会在冬季打篮球和跑步,打棒球并在春季和夏季跑步,踢足球并在秋季跑步。 B人可能会在春季,秋季和夏季散步和跑步,并在冬季打篮球和冰球等。

换句话说,每个人都有4组(或阵列)体育活动(称为他们最喜欢的景点活动)每个季节一个。

我想知道的是将这些值集映射到关系数据库中的个人的最佳方法。我想我会有一张桌子和一张体育活动桌子。但是,我如何表示来自体育活动表的重叠组值并将其映射到人员表中的个人?

回答

3

您将活动映射到一个人。你的表格会引用活动和人员,而主键将是这两者的组合。

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

如果你想在赛季补充:

person, activity, season 

personActivitySeasn 
+0

但如果这个人在几个不同的季节相同的活动相同的活动可能会被多次映射。我不明白你是如何表达这一点的。 – Elliott 2013-05-07 14:43:51

+0

正如FreshPrinceOfSO建议你可以在第三个三米表的cols(人,活动,季节)复合键。 – 2013-05-07 14:49:08

+0

@Elliott见[此演示](http://sqlfiddle.com/#!2/ebc16/1)。您将需要设置外键。 – Kermit 2013-05-07 14:52:46

0

您可以创建第三个表“活动”包含个人ID(PK亲自表)和运动ID(在体育台PK)。

1

你也会有一个季节表(可能只有四个值)。然后,你将有一个表PersonActivitySeasons与像列:

  • PersonActivitySeasonId
  • PERSONID
  • SeasonId
  • ActivityId
  • 活动

这是最标准化的格式的日期。在实践中,也可能使四季列:

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

我往往会去与第一种方法,因为我可以有有效日期和结束日期为每个记录每个季节,也更容易跟踪的人进进出出的活动。此外,如果这对你有用,它将允许“不符合”的季节。

+0

我不会建议第二种方法;即使仅仅因为活动日期而只有4个季节。 – Kermit 2013-05-07 14:53:40