如何在SQLite中组织这样的数据库?

时间:2011-10-05 18:13:56

标签: database sqlite database-design

人们!我需要一些帮助组织应用程序的数据库,我不知道如何做到这一点。假设如下: 有一个学术科目列表。对于每个科目,我们需要有一个学术团体的名单,参加这个主题。然后,对于每个组,我们需要有一个日期列表。对于每个日期,我们需要有一份学生名单,以及该学生当天是否在场。 我心中有丑陋的数据结构,会感激任何帮助。

更新

我如何看待它:

表1(第一个col是日期,第二个是列表学生的id,谁在场)

10/10/11 | id1, id2, id3

10/11/11 | id1, 1d3, id5

表2:

subject1 | id1 id2 id3

subject2 | id3 id2

同样,ids是群组的ID。不知道如何连接这些表。

2 个答案:

答案 0 :(得分:2)

在设计数据库时需要考虑许多因素,但根据您目前提供的信息,这样的事情可能是一个好的开始:

enter image description here

此ER模型使用大量识别关系(即将父母的主键“迁移”到孩子的PK中),并产生自然主键,而非识别需要使用代理键的关系。现在很多人都喜欢代理键,但事实是两种设计策略都有利有弊。特别是:

  • 自然键更大(它们在多个父子关系级别“累积”字段)。
  • 但是,自然键需要较少的JOINing。
  • 自然键可以在某些特殊情况下(例如菱形依赖项)更好地强制执行约束。

答案 1 :(得分:1)

您将为数据库中的每种“事物”(科目,小组,学生,会议)设计一个表格。每个表都有一列用于存储关于该事物的每个数据(信息)。此外,必须有一列或可预测的列组合,以便您唯一地标识存储在表中的每个事物(行)。

然后,您将决定事物(主题,群组,学生,会议)之间的相互关系,并确保每个表中都有正确的列来存储这些关系。您将发现在某些情况下,可以通过向已定义的表添加一个或多个列来完成此操作。在其他情况下,您需要添加一个全新的表,该表不存储“事物”,本身,而是两个事物之间的关系。

如果您有表格和列的列表,如果您认为无法正确表示问题的某些部分,请发布您已经完成的工作的另一个问题,我相信您会找人帮忙你完成任务。

对您的更新的回复:

你走错了路。在单个字段中存储两个值是一个坏主意(与正确的关系数据库设计相反)。因此,您编写的每个表应该有两列(如您所说),但第二列应该存储一个且只存储一个ID。而不是在10/10的table1中的一行,而是在表中有三个单独的行。

但是,在你开始担心“关系”之前,创建表来保存“事物”。

我还建议您选择关系数据库的基本指南。