Database design 关于不必要外键的数据库设计问题

Database design 关于不必要外键的数据库设计问题,database-design,Database Design,假设我有三个表-申请人,组,和季节。每个申请人都有一个组,每个组都有一个季节 另一方面,每个季节有多个组,每个组有多个申请人 从绩效角度来看,或者从任何其他角度来看,直接将申请人链接到组和季节是否有任何错误,即使您可以通过组访问季节 在读取模式下,您可能会赢得一点不明显的时间,因为少了一次加入,您肯定会赢得一次更新异常,这将使您在更新数据库时的生活(编码)变得非常复杂,并且几乎肯定会在组“季节变化”时非常明显地降低性能 (如果群组从不“改变季节”,那么您的数据库中可能不应该完全有季节。)@dow

假设我有三个表-
申请人
,和
季节
。每个
申请人
都有一个
,每个
都有一个
季节

另一方面,每个
季节
有多个
,每个
有多个
申请人


从绩效角度来看,或者从任何其他角度来看,直接将
申请人
链接到
季节
是否有任何错误,即使您可以通过
访问
季节

在读取模式下,您可能会赢得一点不明显的时间,因为少了一次加入,您肯定会赢得一次更新异常,这将使您在更新数据库时的生活(编码)变得非常复杂,并且几乎肯定会在组“季节变化”时非常明显地降低性能


(如果群组从不“改变季节”,那么您的数据库中可能不应该完全有季节。)

@downvoter&closevoter:这是一个关于数据库设计的问题。数据库设计不是精确的科学。你打算在将来不允许任何关于数据库设计的问题吗?组永远不会改变季节,但我们需要能够轻松地按季节生成报告,如果我删除季节并将其作为列添加到组中,那么纠正这一点就不那么容易了?你说的“将其作为列添加到组中”是什么意思?如果您的数据库设计准确地反映了“每个组都有一个季节”的概念,那么该列应该已经存在了。你不需要赛季表就可以在那里为每个赛季制作小组报告。(如果你有某种报告工具需要这样做,那么你应该在你的问题中指出这一点,因为问题不再仅仅是关于数据库设计。)我的意思是,在组表中,我将跟踪季节名称,因此,如果没有季节表,您运行这样一个查询的次数是多少,我将首先查询groups表,然后按季节分组,然后从那里开始。