繁体   English   中英

数据库设计-哪个最适合?

[英]Database Design - Which would be best for this?

我是一个设计数据库的新手。 我想创建一个包含员工信息的数据库(使用mysql)。 然后,我将编写Web客户端以显示每个员工资料。 到目前为止,我的专栏文章是:

1) user id
2) first name
3) last name
4) email address
5) phone number
6) fax number
7) department(which will be like a category)

最好的设计是将一个表中的1-6列放在一个表中,然后在自己的表中包含一个Department列(带有一个id列)? 还是我应该将所有项目都设置为自己的表,为每个表分配一个额外的id列...。这将是#1规范化表格吗?

只要您的所有列都不是多值的(例如,一个员工可以有多个部门),那么您的设计就是最佳的。

您的第一个解决方案更好,第1到第6项应全部位于同一表users 如果您要存储有关部门的更多信息,则需要有一个特定的表departments ,该departments将至少有两列: idname ,然后在users表中, department _id列将存储与departments表中的departments

如果您没有存储有关部门的任何其他信息,最好将部门名称直接存储在users表中,以避免每次检索或更新有关用户的信息时都必须联接表。

User_Master
------------------

UserID - Primary Key
DeptID  - Foreign Key
FirstName
LastName
EmailID
PhoneNumber
FaxNumber


Dept_Master
----------------

DeptID - PrimaryKey
DepartmentName

一些进一步的想法...

不要忘记考虑时间。 员工可以更换部门吗?您有兴趣了解这一历史吗? 如果是这种情况,则必须有一个单独的Departments表,并且可能要有一个带有EmployeeID,DepartmentID,StartDate和EndDate的Service(或其他)表。

在考虑随时间而发生的变化时,电话和传真号码以及电子邮件地址是否适合员工或职位? 如果珍妮特(Janet)担任主管的工作,是在新办公室里获得了另一个电话号码,还是电话号码随人移动的地方之一。 同上电子邮件。 地址是hr.nzl@example.com还是joe.smith@example.com? 如果在这两种情况下都是前者,则您可能想考虑一个位置表,该位置表跟踪具有DepartmentID外键的电话/传真/电子邮件(以及薪水,FT或PT等)。

如果您正在考虑使用SQL,那么绝对可以(至少)以第一范式进行思考。 多值列不仅速度慢,而且是走向混乱的第一步。 如果您转向基于Nosql的解决方案,则此规则不适用。

普通表格2到5有助于填充表格,但不会帮助您使用Web客户端。 通过完全规范化,您将获得的最大好处就是保证了数据库不会与自身矛盾。 在两个不同的员工记录(行)中,同一部门的两个不同名称之类的东西。

您需要添加到视野中的最大事情是视图。 您可以使用视图来达到很好的效果,使数据看起来更像您希望网页显示的样子。 这将使构建Web客户端更加容易。 在某些领域,视图也无济于事。

采取下拉列表。 如果按照建议,人们可以拥有多个电话号码,那么您可能希望在员工页面上有一个电话号码的下拉列表。 这基本上是一个多值字段,并且视图在这方面并不是特别有用。

我认为您可以具有部门列,例如department1,department2等,其中将包含每个部门的ID。 您可以创建另一个名为Department的表,该表将具有ID和部门名称。 现在,您可以将第一个表中的部门ID链接到第二个表中。 如果员工属于多个部门,这不会混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM