什么是最佳数据库结构在这种情况下?

时间:2016-03-25 18:35:18

标签: c# mysql sql-server database

我正在开发一个C#程序,它最终会在数据库中读写数据。我正在考虑使用Microsoft SQL Server,因为根据我的阅读,与C#的连接简单而有效。但是,我不确定如何使用我需要存储的信息来设置和构建数据库。

数据涉及一个具有一系列具有一系列属性的区间的独特人物。例如,已经在系统中工作六个月的人“Bob”将有两个间隔,一个为三个月,一个为六个月。例如,三个月的间隔将具有该人所做的爱好列表,其中可能与六个月间隔不同。以编程方式,我可以使用词典,列表和ADT轻松地表示这些内容,但是将其转换为数据库很难让我满意。

我能想到的唯一方法是将每个列表中的每个值作为单独的记录,但我对这种方法持怀疑态度。我觉得这不是最好的做事方式。

例如,我有一个人员表,看起来像这样:

Name, Age, DOB

然后是一个看起来像这样的Interval表:

Name, Three Months
Name, Six Months

然后是这样的爱好表:

Name, Three Months, Bike Riding
Name, Three Months, Coding
Name, Six Months, Bike Riding
Name, Six Months, Coding
Name, Six Months, Basketball

我觉得这种情况会变得太快,特别是当预计有一千多个不同的人都有自己的间隔时。

如果有人能够摆脱他们的一些智慧或个人经历,我们将非常感激!谢谢!

2 个答案:

答案 0 :(得分:1)

我建议你有五张桌子。

人: Id,姓名,年龄,DOB。

间隔: Id,名称(间隔)

IntervalPerson: Id,personIdFK,intervalIdFK

爱好: Id,姓名(爱好)

HobbieIntervalPerson Id,intervalPersonIdFK,hobbyIdFK

通过这种方式,您的所有表格都将被标准化(这将为您节省大量的麻烦),并且您将能够以结构化的方式存储数据。

此外,为了解决您对将要生成的记录数量的关注,因为您预计会有超过1000人。我不担心,现代数据库的记录非常少,所以我不希望有明显的性能影响。

希望这有帮助!

答案 1 :(得分:0)

也许这会奏效:

人员表与爱好表一起听起来不错。现在你只需要一个将人们加入爱好的木匠,就像Person_Hobby一样。

不要在每个区间都有记录,只需输入日期:

  • 有效
  • 过期

在木匠表中。这允许获得任何间隔的人的爱好。

然后你可以有一个包含所有间隔的查找表。

Interval 1 - 2016年1月1日至2016年3月1日

然后,可以使用这些日期作为针对Person_Hobby表的条件,以获得该间隔的爱好。因此,每个记录定义间隔,而不是每个记录间隔。如果说爱好已经过期,那么将需要多个记录,然后一年后该人再次接受记录。但那可能适合你。