在postgres中创建另一个表和使用数组之间有什么区别

问题描述 投票:2回答:1

在我的大学里,我被赋予了创建一个简单的大学数据库的任务,其中有一些表格,如学生,部门等。有一个有趣的时刻,我在学生和班级之间建立关系,一个学生可以选择多个班级,我被教导使用两个FK创建第三个表,它应该看起来像这个Adam(id - 1)需要数学课程(id - 5)而在第三个表中,记录将是(1,5),这里是一个问题为什么我们应该更喜欢第三个表而不是数组,对我来说,将学生的类作为学生表中的附加列看起来更容易。这是一个例子,想象学生表(id, name, age, arrayOfClassesID) (1, Adam, 20, [1,8,9,6,7])

附:这不是我的功课,我已经做过了,但这对我来说真的很有趣

arrays postgresql database-design denormalization
1个回答
4
投票

从理论的角度来看,问题在于这种设计违反了第一种正常形式。这有实际的影响:

  • 作为a_horse_without_name注释,第一个问题是您不能对数组元素具有外键约束。
  • 快速搜索的索引仅使用GIN索引和@>运算符以有限的方式工作。使用LIKE>进行搜索无法进行优化。
  • 即使使用GIN索引,搜索所有学生的课程效率也会降低,而且查询会更复杂,更不直观。
  • 如果要删除学生的课程,则必须重写整个数组。这可能不是什么大问题,但是对于更长的阵列,它可能会受到伤害。

使用映射表只是在关系数据库中执行此操作的自然方式。

© www.soinside.com 2019 - 2024. All rights reserved.