数据规范化和写入查询
|
我是小。开发人员(工作5个月),我对数据规范化有疑问。现在,据我所知,数据标准化背后的一般原理是创建一个RDBMS,其中将数据冗余降至最低。在我的项目中,一名数据库人员创建了一个数据库。我们有50多个表,并且数据库中的表通常非常分散,即。一个表有两三列,仅此而已。现在,在编写sql查询时,这已经成为一个小麻烦了,因为每个查询都涉及梳理几个不同的表并将它们连接在一起。我想知道这是否是数据标准化的副作用?还是这指向别的东西?
我知道,对我而言,最简单的方法是根据必须编写的查询来编写表。这将创建一个包含大量冗余数据的数据库,但是我很好奇是否有一个令人满意的介质吗?
就像一个后记一样,我不想像我抱怨自己的作品那样碰面,但是我真的很想了解更多有关此的信息。我的工作环境不是最友好的,所以我不愿意与同事一起提出这个问题。但是,我将不胜感激经验丰富的人的任何想法,书籍,教程或意见。
谢谢。
没有找到相关结果
已邀请:
7 个回复
亥套惟间连
届甸衬丝蚕
),要么提供操作它们的功能(如
)。 企图避开“一个价值”原则会导致一个必然结果:“没有重复的群体”原则。 重复组涉及一个域中的多个值,所有值都具有相同的含义。因此,下面的表格是一种重复组的示例。 (还有其他种类。)\“ phone_1 \”和\“ phone_2 \”的值来自同一域,并且它们的含义相同-用户\'n \'具有电话号码(phone_1和phone_2)。 (主键为\“ user_id \”。)
但是下一张表虽然很相似,但是没有重复的组。这些值来自相同的域,但含义不同。 (主键为\“ user_id \”。)
2NF是“整个密钥”的原则。它与键的数量无关。具有\'n \'列的表可以具有\'n \'键。 (例如,请参见另一个SO答案。)在关系模型中(以及扩展,当您进行标准化练习时),如果您看到单词key本身,请考虑“ candidate key”。 相反,2NF与具有多列的候选键有关。当候选键具有多个列时,2NF要求每个非素数属性在功能上均取决于每个候选键的所有列,而不仅取决于任何候选键的某些列。 (非素数属性是不属于任何候选键的属性。) 下面的示例改编自2nf上的Wikipedia条目。 (主键是{employee,skill}。)
虽然非主列current_work_location在功能上确实依赖于主键{employee,skill},但在功能上也仅依赖于主键\“ employee \”的一部分。该表不在2NF中。 您不能通过为每行分配一个代理密钥来规避2NF问题。 (主键是es_id;以前的主键{employee,skill}有一个UNIQUE约束)。
很明显,添加id号并不能消除部分依赖性
。在不删除部分依赖性的情况下,该表仍不在2NF中。 3NF是“无传递依赖项”原则。正如您可以从Wikipedia示例中看出来的那样,它不一定与派生或计算的数据有关。 (主键为{tournament,year}。此表不在3NF中。)
两个依赖关系表明此表具有传递依赖关系。 优胜者出生日期中的值 似乎在功能上取决于 首要的关键。每个主键值 确定一个且只有一个值 获奖者的出生日期。但是。 。 。 优胜者出生日期中的值 也似乎在功能上依赖于 优胜者。每个赢家的价值 确定一个且只有一个值 获奖者的出生日期。 鉴于这两个明显的功能依赖性以及对比赛,获胜者和生日的含义的理解,我们可以说 获胜者-> winner_date_of_birth是一个 功能依赖性,以及 {比赛,年份}->获胜者是一种功能依赖性,并且 {比赛,年份}-> winner_date_of_birth是可传递的 依赖性。
缉康怪
肉脓措伪
播匣扦阔食
填盖
舶啥戚