6

可能重复:
数据库规范化到底是做什么的?

有人可以澄清数据规范化吗?有哪些不同的层次?我什么时候应该“去规范化”?我可以过度正常化吗?我有一张包含数百万条记录的表,我相信我对其进行了过度规范化,但我不确定。

4

3 回答 3

5

如果你有一百万,你可能会对其进行标准化。
规范化的意思是

每个非关键属性“必须提供关于关键的事实、完整的关键,并且只提供关键。”

如果您有一列依赖于除键之外的任何内容,则应规范化您的表。
这里

添加到回复评论:
如果您有 ProductID | 产品类型 | ProductTypeID,其中 ProdcutTypeID 仅取决于 ProductType,您应该为此创建一个新表:
ProductID | ProductTypeID 和另一张表: ProductTypeID | 产品类型名称。
因此,要回答您的问题,与产品有关的问题还不够准确,在我的第一个示例中,我也与产品有关。所有列都应与 ProductID 相关(您可能会说您描述产品,但不描述其他任何内容,即使它与产品相关 - 这是准确的)。
行数,一般来说是无关紧要的。

于 2010-10-06T15:29:46.777 回答
4

规范化是关于减少关系数据库中的数据重复。最流行的级别是第三范式(它是由“键、整个键和只有键”所描述的那种),但是有很多不同的级别,请参阅Wikipedia 条目以获取主要的列表. (在实践中,人们似乎认为他们在实现第三范式方面做得很好。)非规范化意味着接受更多的数据重复,通常是为了换取更好的性能。

于 2010-10-06T15:35:52.043 回答
0

正如其他人所说,数据库规范化是关于减少数据重复和更通用的数据模型(可以轻松地回答设计时意外的查询)。数据库的规范化是允许一个足够正式的过程。当您进行实验时,您主要遵循数据分析方法并最终获得规范化的数据库。

规范化数据库通常是一个好主意,但有一个问题。在许多情况下,它涉及创建新表和表之间的 JOIN 关系。众所周知,JOIN 在运行时具有(非常)高的性能成本,因此对于您可能想要非规范化的大量数据。

另一个成本也可能是需要编写更复杂的请求来访问所需的数据,这对 SQL 初学者来说可能是个问题。最好的想法可能是无论如何都要坚持规范化(第三范式通常就足够了,因为正如其他人所说的那样有几个级别的规范化)并更加熟练地使用 SQL。

于 2010-10-06T16:12:48.537 回答