2

我试图理解数据库规范化,我理解一般的想法,但什么是正确的方法,什么是多余的。

例如,我有一个标准的员工部门数据库作为第一步。

表是

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_name

因此,为了将其标准化为第一步,我会将部门名称移动到单独的表中,并在必要时以多对一的形式加入。

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_id
DEPARTMENTS
id, name

这是否足以进行规范化,还是将所有其他字段移动department_id到第二个表(例如)更好employees_meta?想象一下,如果我们在描述员工的表中还有 20 个字段,那么什么是正常的?

如果我们谈论的是优化网页,正确的规范化是否只有我们在处理员工表时总是显示的字段,以及我们不经常使用的所有其他信息移动到不同的表?

4

4 回答 4

3
EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_name

因此,为了将其标准化为第一步,我会将部门名称移动到单独的表中,并在必要时以多对一的形式加入。

EMPLOYEES:
id, first_name, last_name, dob, email, city, address, department_id
DEPARTMENTS
id, name

当您基于函数依赖进行规范化时,您的原始表总是以较少的列结束。你从 8 开始,以 8 结束。

您将原始表中的“department_name”替换为“department_id”。没有规范化指南说“用 ID 号替换文本”。这不仅与规范化无关,它还引入了以前不需要的强制连接。

这并不一定意味着用 ID 号替换文本是错误的做法。这确实意味着您不应该将其称为标准化。因为不是。

规范化的第一步是识别候选键和功能依赖关系。

于 2012-10-20T15:51:47.433 回答
2

将城市字段移动到分隔表中,我认为这足以正常。数据库规范化的简单关键是避免重复值并将其分离到单个表中。但是,有些数据不需要像sex字段那样分开,最好使用枚举数据类型然后分开到其他表中。

注意:查询连接表过多会降低性能。

于 2012-10-20T11:04:36.553 回答
2

规范化处理实体。代表模型中实体的所有内容都应该分开(规范化)。

如果您有一个包含人员(名字、姓氏等)的表,并且所有这些人员也是具有登录用户名和密码的用户,那么您不需要规范化。

但是,如果只有一些人将成为用户,则您应该规范化为 2 个表(人员,使用 person_id 作为人员实体链接的用户),并且如果您需要将人员和用户实体存储在几个不同的地方(人员之间的关系,标记记录与创建和最后修改的用户),那么你最好规范化。

因此,正如 CatCall 所说,规范化不会更改带有 id 的名称。那只是创建查找。

于 2012-10-20T16:25:57.590 回答
1

如果您有关于某个位置以及城市的其他信息,例如(城市、州、邮政编码),那么只需将邮政编码与员工数据一起存储。有一个单独的表,称为“美国位置索引”或任何包含邮政编码作为主键、城市和州的表。您可以存储 2 种状态名称变体,全称和缩写。基本上重点是城市和州很容易通过邮政编码确定......你可以这样想。美国的每个州都有很多城市,每个城市都有很多邮政编码,但每个邮政编码标识一个特定城市和州的组合。例如,在 NYC,邮政编码 10010 将标识为 new York, NY,而 10001 将标识为 new York, NY。但 11222 将标识为纽约布鲁克林。希望这可以帮助。

于 2013-07-29T17:43:18.333 回答