【问题标题】:Separate tables for 1-1 relationship1-1 关系的单独表
【发布时间】:2016-04-24 04:00:46
【问题描述】:

我正在创建一个 Access 数据库来保存学生实习信息。我遇到的问题是我有三个表与实习表(作业、主管评估和学生评估)只有一个关系。

由于 Access 不允许一个表有多个自动生成的编号,我不能让实习表为三个表中的每一个创建 ID 号。所以,我不知道怎么做,所以当我们在这些表格中输入数据时,我可以把它专门分配给实习。有什么建议吗?

【问题讨论】:

    标签: database ms-access database-design


    【解决方案1】:

    1-1 关系总感觉应该合并到一张表中。如果它们实际上是 1-1 并且不应该是 1-0,1,则尤其如此。在后一种情况下,如果依赖信息可能会丢失并且在大多数情况下会丢失,那么将其分离到自己的表中可能会有所帮助。但即便如此,也可以通过为某些属性赋予 null 值来表达。

    现在,如果出于某种原因,您坚持使用这 4 个表,则有两种方法可以获取主键。一种是,对于从属表,不将主键声明为自动生成的,而是将其声明为数字,并将实习记录的自动生成值分配给它。另一种方法是为每个从属表自动生成一个主键,并在 Intership 表中为每个表创建一个外键。由于我认为这些依赖表的整个构造不必要地复杂,因此我无法就这些方法中的哪一种给出建议。

    我对您的数据模型还有另一个顾虑。您的表具有诸如 answer1、answer2 之类的属性......现在,如果您有少量固定数量的这些属性,这可能没问题。但是你能不能有一组更大的固定问题,也许对于每种类型的实习,这些问题可能会动态变化并且不能仅仅通过固定的列结构来表达?在这种情况下,您将需要类似

    Question(id, text)
    Internship(id, ...)
    Answer(id, internship_id, question_id, student_answer, supervisor_evaluation)
    

    所以你的基数是

    Internship 1-----0,n Answer 0,n------1 Question
    

    实习的其他细节也是如此。

    【讨论】:

    • 老实说,我不介意将它们合并到一个表中,但是没有某种数据库“规则”表明拥有这么大的表是不好的吗?
    • 问题都是静态的。 5年多来,他们一直都是一样的。但是,我同意你的看法,我认为有比我所做的更好的方法。我想到的解决方案是让 assignmentId 与实习Id 相同,但不连接它们。我将使用一个组合框来选择实习,它会将 ID 输入到 assignmentId 中。
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多