由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - Help with database design
相关主题
Informix中的trigger问题有大侠知道怎么format下面这个query的时间么
一个关于T-SQL的问题convert datetime to ''
再请教大牛一个问题SQL, recruiter发过来的面试题 (转载)
SSRS report failing to display dataset stringQuestions on SQL
转换成时间的格式 MS SQLUrgent help needed, please
date format转换问题请教多对多relation?
SQL Server - convert datetime to a string YY-MM-DD HHSQL help.
问个查询问题。急!怎么做模糊查询?
相关话题的讨论汇总
话题: varchar话题: badge话题: employee话题: table话题: datetime
进入Database版参与讨论
1 (共1页)
s***u
发帖数: 41
1
有一个Employee table,很多栏(field),包含了职员的基本信息和这个职员的badge
的信息。(见附件插图和下面的 table)
CREATE TAbLE Employee
{
emplLastName varchar(30) ,
emplFirstName varchar(30) ,
emplNickname varchar(20) ,
emplCategory varchar(2) ,
emplCampID varchar(10) ,
emplArea varchar(10) ,
emplDepartment varchar(20),
emplTitle varchar(50) ,
emplEmployeeID varchar(9),
emplCardNumber varchar(16),
emplActive tinyint(4) ,
emplComment longtext,
emplRecycleDate datetime,
emplBadge1 varchar(30) ,
emplBadge2 varchar(30) ,
emplBadge3 varchar(30) ,
emplBadgeDate datetime ,
emplBadgeSend tinyint(4) ,
emplType int(10) ,
emplCompleteDate datetime,
emplIndexSent datetime ,
emplSupervisor varchar(50),
emplyBadgeReturn tinyint(4) ,
emplyReprintRtrn tinyint(4) ,
emplautonumber int(10)
}
请问大家如何把这个Employee table重新设计,设计成至少有一个Employee table, 一
个badge table, 并且把它们关联起来。(Normalization the original big employee
table)
大家能不能给我一些指点,该怎么重新设计这个database schema呀?
谢谢。
a9
发帖数: 21638
2
加个自增长id列喽

badge
employee

【在 s***u 的大作中提到】
: 有一个Employee table,很多栏(field),包含了职员的基本信息和这个职员的badge
: 的信息。(见附件插图和下面的 table)
: CREATE TAbLE Employee
: {
: emplLastName varchar(30) ,
: emplFirstName varchar(30) ,
: emplNickname varchar(20) ,
: emplCategory varchar(2) ,
: emplCampID varchar(10) ,
: emplArea varchar(10) ,

s***u
发帖数: 41
3
请问如何把这个大表格如何重新设计呀。这是一个badge database sytem for all
employees. 我想把employee, 和badge信息分开来。可是就是理不清该怎么设计起来
。(我还是数据库方面的入门级别都不到,就知道一些概念而已。)。 感谢大家指点
一下。谢谢。
w****u
发帖数: 3147
4
晕。。。弄个子表,外键链起来

【在 s***u 的大作中提到】
: 请问如何把这个大表格如何重新设计呀。这是一个badge database sytem for all
: employees. 我想把employee, 和badge信息分开来。可是就是理不清该怎么设计起来
: 。(我还是数据库方面的入门级别都不到,就知道一些概念而已。)。 感谢大家指点
: 一下。谢谢。

s***u
发帖数: 41
5
是要建立三个表格吗,一个把employee表格(其中有一栏employeeID) , 一个badge表
格(其中有一栏badgeID),然后再一个employeeBadge表格把这两个表格链接起来(
employeeID, badgeID)。
那个大employee表格里,哪些field适合放进新的employee表格,哪些适合放进badge表
格呢?
知道我的问题对大家来说,肯定太简单,可惜我太菜鸟,不太明白你们说的什么意思。
请问可以说得具体详细一些吗?帮我把整个database schema 写出来,那就太好啦。谢
谢:-)
B*****g
发帖数: 34098
6
一个badge可以被几个人拥有?

【在 s***u 的大作中提到】
: 是要建立三个表格吗,一个把employee表格(其中有一栏employeeID) , 一个badge表
: 格(其中有一栏badgeID),然后再一个employeeBadge表格把这两个表格链接起来(
: employeeID, badgeID)。
: 那个大employee表格里,哪些field适合放进新的employee表格,哪些适合放进badge表
: 格呢?
: 知道我的问题对大家来说,肯定太简单,可惜我太菜鸟,不太明白你们说的什么意思。
: 请问可以说得具体详细一些吗?帮我把整个database schema 写出来,那就太好啦。谢
: 谢:-)

s***u
发帖数: 41
7
Beijing MM:
太谢谢你有心帮助我呀!
唉,怎么回答你的问题呢,这个badge系统里有好几种badge卡,比如:
badge for staff
badge for vendor
badge for guests
temp cards
。。。
给staff的卡,基本是一个人一个卡,除非卡掉了,再重新申请新的卡;
badge for vendor, 那就是一个卡,给那个vendor公司的几个人共用;
badge for guests,一个卡,给一个人用,用完了返回,下次给另外一个人用;
一个staff ,可以有 staff badge (for go to his office);但是如果因为工作需要,
想去另外不同的building,就有可能有另外一个badge (but for different building
area)....
目前,所有的信息都是用一个大表格装下来,很乱。(比如vendor,系统里就把某个办公室列为其名字,然后很多“Employee"信息都不输入进去,--因为他们不是Employee,没有那些信息----但是系统还是把他们当作Employee处理)
该怎么把这个系统重新设计更合理呢?我感觉很有些混乱。请给我一些详细指点吧。
非常非常感谢!
p*********t
发帖数: 2690
8
1个employee可以有3个badge;1个badge只能有一个employee吗?
按说狠简单啊,连normalization 1nf,2nf之类的都不需要,只有2个entity.

badge

【在 s***u 的大作中提到】
: 有一个Employee table,很多栏(field),包含了职员的基本信息和这个职员的badge
: 的信息。(见附件插图和下面的 table)
: CREATE TAbLE Employee
: {
: emplLastName varchar(30) ,
: emplFirstName varchar(30) ,
: emplNickname varchar(20) ,
: emplCategory varchar(2) ,
: emplCampID varchar(10) ,
: emplArea varchar(10) ,

p*********t
发帖数: 2690
9
employee和badge之间是什么关系,是1对n,还是n对1,还是n对n? 只有n对n的时候才要
一个bridge table.

【在 s***u 的大作中提到】
: 是要建立三个表格吗,一个把employee表格(其中有一栏employeeID) , 一个badge表
: 格(其中有一栏badgeID),然后再一个employeeBadge表格把这两个表格链接起来(
: employeeID, badgeID)。
: 那个大employee表格里,哪些field适合放进新的employee表格,哪些适合放进badge表
: 格呢?
: 知道我的问题对大家来说,肯定太简单,可惜我太菜鸟,不太明白你们说的什么意思。
: 请问可以说得具体详细一些吗?帮我把整个database schema 写出来,那就太好啦。谢
: 谢:-)

s***u
发帖数: 41
10
protagonist:
谢谢你的问题。请看我上面给beijing mm的回答。你说我上面说的那种情况算是n对n吗
?具体该怎么设计呢?谢谢!
相关主题
date format转换问题请教有大侠知道怎么format下面这个query的时间么
SQL Server - convert datetime to a string YY-MM-DD HHconvert datetime to ''
问个查询问题。SQL, recruiter发过来的面试题 (转载)
进入Database版参与讨论
a9
发帖数: 21638
11
你不懂咋让你设计呢。你这是让别人给你干活了嘛。
是不是设计好了,下一步就该问怎么实现了。

【在 s***u 的大作中提到】
: protagonist:
: 谢谢你的问题。请看我上面给beijing mm的回答。你说我上面说的那种情况算是n对n吗
: ?具体该怎么设计呢?谢谢!

w***a
发帖数: 313
12
TABLE employees
emplLastName varchar(30) ,
emplFirstName varchar(30) ,
emplNickname varchar(20) ,
emplCategory varchar(2) ,
emplCampID varchar(10) ,
emplArea varchar(10) ,
emplDepartment varchar(20),
emplTitle varchar(50) ,
emplEmployeeID varchar(9),
emplCardNumber varchar(16),
emplActive tinyint(4) ,
emplComment longtext,
emplRecycleDate datetime,
emplType int(10) ,
emplCompleteDate datetime,
emplIndexSent datetime ,
emplSupervisor varchar(50),
emplyReprintRtrn tinyint(4) ,
emplautonumber int(10)
TABLE empl_badg
empl_badgIssueDate
empl_badgReturnDate
emplEmployeeID
badgBadgeID
TABLE badges
badgBadgeID varchar(30) ,
badgStatus varchar(30) , (active, deactived, expired, lost ...etc)
badgType varchar(30) , (staff, guest, vendor etc)
badgExpireDate datetime ,
上边三个表就可以了,visitor,vendor省事点的做法是也放到employee表里,用员工类
型区分就可以了。

【在 s***u 的大作中提到】
: Beijing MM:
: 太谢谢你有心帮助我呀!
: 唉,怎么回答你的问题呢,这个badge系统里有好几种badge卡,比如:
: badge for staff
: badge for vendor
: badge for guests
: temp cards
: 。。。
: 给staff的卡,基本是一个人一个卡,除非卡掉了,再重新申请新的卡;
: badge for vendor, 那就是一个卡,给那个vendor公司的几个人共用;

B*****g
发帖数: 34098
13
ding

【在 w***a 的大作中提到】
: TABLE employees
: emplLastName varchar(30) ,
: emplFirstName varchar(30) ,
: emplNickname varchar(20) ,
: emplCategory varchar(2) ,
: emplCampID varchar(10) ,
: emplArea varchar(10) ,
: emplDepartment varchar(20),
: emplTitle varchar(50) ,
: emplEmployeeID varchar(9),

g***l
发帖数: 18555
14
这个明显的不是3RD NORMAL FORM,连BADGE1 BADGE2都出来了,重复的GROUP.连1 NORMAL
FORM都不是.明显地是三个TABLE,需要个EMPLOYEE_ID的KEY
EMPLOYEE TABLE
(
EMPLOYEE_ID primary key ,
EMPLOYEE_NAME,
any employee information, must be 1 to 1 from employee_id
)
BADGE TABLE
(
BADGE_ID primary key,
BADGE RETURNED DATA
ANY BADGE RELATED INFO, MUST BE 1 TO 1 FROM BADGE_ID
)
EMPLOYEE_BADGE TABLE
(
EMPLOYEE_ID,
BADGE_ID
) PRIMARY KEY IS BOTH
s***u
发帖数: 41
15
非常感谢wanna和 gejkl出面抛钻引玉。。。任何建议都让我很感激。
-------------------------------------------------------
gejkl:
你说"连BADGE1 BADGE2都出来了", 对不起,我在这里解释一下,在原表格EMPLOYEE
里的三个field (对应那个图片里的Badge1 ,Badge12, Badge3):
emplBadge1 varchar(30) ,
emplBadge2 varchar(30) ,
emplBadge3 varchar(30) ,
不是指员工有三个Badge,而是这三个field是用来存制作BADGE的信息的,比如
emplBadge1 :shaou
emplBadge2: staff
emplBadge3 : kenney Hall
(以上的信息是用来打印到Badge上的)。
g***l
发帖数: 18555
16
说的就是这个,如果你看看DATABASE的书,1ST NORMAL FORM就是去除REPEATING GROUP
,就是这个BADGE1, BADGE2, BADGE3

EMPLOYEE

【在 s***u 的大作中提到】
: 非常感谢wanna和 gejkl出面抛钻引玉。。。任何建议都让我很感激。
: -------------------------------------------------------
: gejkl:
: 你说"连BADGE1 BADGE2都出来了", 对不起,我在这里解释一下,在原表格EMPLOYEE
: 里的三个field (对应那个图片里的Badge1 ,Badge12, Badge3):
: emplBadge1 varchar(30) ,
: emplBadge2 varchar(30) ,
: emplBadge3 varchar(30) ,
: 不是指员工有三个Badge,而是这三个field是用来存制作BADGE的信息的,比如
: emplBadge1 :shaou

p*********t
发帖数: 2690
17
emplBadge1 :shaou
emplBadge2: staff
emplBadge3 : kenney Hall
这样啊?最好每个badge有一个badge number/id,用过的badge number/id最好就别再用
了,人走了或者badge不用了,badge number/id就作废了,新来的就用一个新的badge
number/id,这样能避免新人和走的人的数据混在一起.
badge number/id的可能的最大数是多少?以此来决定badge number/id至少要几位数。
如果是这样的话,
badge TABLE {
BadgeId,
emplBadge1,
emp1Badge2,
emplBadge3
}
如果是一个员工一个badgeId的话,只要2个table (employee, badge)就行了,连
bridge table都不用。
具体员工和badge之间是1对1,1对n,n对1,还是n对n,那就要你自己搞清楚了。如果不
清楚,最好向老板请示,千万别自作主张,到时候出错就麻烦了。

EMPLOYEE

【在 s***u 的大作中提到】
: 非常感谢wanna和 gejkl出面抛钻引玉。。。任何建议都让我很感激。
: -------------------------------------------------------
: gejkl:
: 你说"连BADGE1 BADGE2都出来了", 对不起,我在这里解释一下,在原表格EMPLOYEE
: 里的三个field (对应那个图片里的Badge1 ,Badge12, Badge3):
: emplBadge1 varchar(30) ,
: emplBadge2 varchar(30) ,
: emplBadge3 varchar(30) ,
: 不是指员工有三个Badge,而是这三个field是用来存制作BADGE的信息的,比如
: emplBadge1 :shaou

s***u
发帖数: 41
18
谢谢protagonist ,gejkl, wanna ,谢谢你们的建议。
我会听从你们的建议,好好问清这badge与employee之间的关系。
谢谢大家
g***l
发帖数: 18555
19
应该是多对多,一个EMPLOYEE有多个,比如回头客,肯定换了BADGE,同样的BADGE又被
不同的EMPLOYEE用,比如前一个被LAYOFF,后来又雇了一个,把同样的BADGE给了下一
个人,这个要看公司怎么操作,原则是应该是一对一的关系,一个人一个BADGE,不能
SHARE不能重复使用,
w***a
发帖数: 313
20
按我们公司来说,正式员工一般情况是一对一,因为badge上有照片的,不能换用。
临时badge没照片,是一对多,可以随意用。
要是统一考虑,还是都按一对多来设计比较好

【在 g***l 的大作中提到】
: 应该是多对多,一个EMPLOYEE有多个,比如回头客,肯定换了BADGE,同样的BADGE又被
: 不同的EMPLOYEE用,比如前一个被LAYOFF,后来又雇了一个,把同样的BADGE给了下一
: 个人,这个要看公司怎么操作,原则是应该是一对一的关系,一个人一个BADGE,不能
: SHARE不能重复使用,

相关主题
Questions on SQLSQL help.
Urgent help needed, please急!怎么做模糊查询?
多对多relation?请各位帮我看看这个最简单的Stored Procedure (转载)
进入Database版参与讨论
p*********t
发帖数: 2690
21
re
按照lz的说法,badge上有名字等个人信息,layoff之后新人不可能再戴这个badge.

【在 w***a 的大作中提到】
: 按我们公司来说,正式员工一般情况是一对一,因为badge上有照片的,不能换用。
: 临时badge没照片,是一对多,可以随意用。
: 要是统一考虑,还是都按一对多来设计比较好

B*****g
发帖数: 34098
22
对,badge是一个,功能不一样,有的只能开大门,有的连datacenter都能进去

又被
下一
不能

【在 w***a 的大作中提到】
: 按我们公司来说,正式员工一般情况是一对一,因为badge上有照片的,不能换用。
: 临时badge没照片,是一对多,可以随意用。
: 要是统一考虑,还是都按一对多来设计比较好

p*********t
发帖数: 2690
23
恩,現在公司的badge,一般都有照片,名字,还有磁条,公司的门都是刷卡才能进的了。

【在 B*****g 的大作中提到】
: 对,badge是一个,功能不一样,有的只能开大门,有的连datacenter都能进去
:
: 又被
: 下一
: 不能

s***u
发帖数: 41
24
谢谢大家还在讨论这个话题。
我刚才run query了解了一下,总共有7344个记录,这个数据库没有primary key :
有166人有两个或者两个以上的badge;
一个badge number就只对应一个人。
但是因为系统记录的历史原因,有些员工的信息不全:
有653人并没有badge number (653个 人的badge number is null);
有586 人没有 Employee ID (586 个 人的employeeID number is null);
有216 人两个信息都没有 (badge number is null, employeeID number is null)
我现在就在想如何处理这些信息不全的人(系统里有他们的职员信息,但是没有badge信
息;或者系统里有他们的badge信息,但是没有职员信息;如果对于两样信息都没有的,
我打算把他们当作 invalid的数据处理算了。)可是怎么处理前面那两种情况呢?
大家有什么建议?
谢谢.
1 (共1页)
进入Database版参与讨论
相关主题
急!怎么做模糊查询?转换成时间的格式 MS SQL
请各位帮我看看这个最简单的Stored Procedure (转载)date format转换问题请教
question on large tables (>=800 million records, 10 G bytes of data)SQL Server - convert datetime to a string YY-MM-DD HH
Join optimization问个查询问题。
Informix中的trigger问题有大侠知道怎么format下面这个query的时间么
一个关于T-SQL的问题convert datetime to ''
再请教大牛一个问题SQL, recruiter发过来的面试题 (转载)
SSRS report failing to display dataset stringQuestions on SQL
相关话题的讨论汇总
话题: varchar话题: badge话题: employee话题: table话题: datetime