2012-02-29 41 views
0

这是一个非常探索性的问题。假设我们正在为大学设计一个数据库;这个地方有学期作为基本的教育时间单位。一年有两个学期,一个半学期在夏季。他们被称为术语来描述他们。如果我们想在某个时间点(例如2012年秋季或2013年春季或2013年夏季)指定一个术语的整数,那么您认为最好的复合整数是多少?为数据库中的列定义值的最佳方法

例如,对于2012年春季,最后一位数字是否为20121?

谢谢!

回答

1

嗯,正如我看到你把这个问题标记为database-design我不得不争论将一个整数分配给两个值:Year和Season。如果您有多字段字段,则无法在First Normal Form中使用表格。

当您尝试为其中一个字段运行查询时,这会带来复杂情况。你将无法轻松回答简单的问题,比如“你有多少年?”而不分析数据。所以我的建议是将你正在谈论的整数分成YearSeason。现在

,如果你坚持使用整数来存储值......那么你的解决方案似乎是完美的:)

+0

该术语非规范化的主要原因是因为简单的查询,如“给我这个教授自2006年夏以来教过的课程”。由于该术语是一个整数,因此您可以对其进行数学计算以获得结果。 – sunbomb 2012-02-29 03:45:31

+0

您可以对标准化表格执行相同的操作,但您也可以拥有更多的灵活性。我的意思是你可以对非规范化解决方案做任何事情,但要以一种更简单的方式进行。当你不需要时,你为什么要“进行数学计算”?这是不必要的处理,应该(必须)避免 – 2012-02-29 04:05:50

+0

@sunbomb:“自2006年夏季以来”可以在一些DBMS中用简单的WHERE(yearColumn,semesterColumn)> =(2006,2)' – 2012-02-29 08:06:10

0

不知道这是否将适用100%到你的情况,但我的工作大学已经遇到了这个问题。如果你的大学的学年开始于秋季,那么你很幸运,因为如果顺序递增,秋季,春季和夏季已经是时间上的,并且按字母顺序排列。如果我需要一个可排序的组合,我使用计算的字段将年份和学期连接在一起。

这是我建议的:

YearSemester: 
------------- 
YearSemesterID (PK and autonumbering) 
Year 
Semester 
YearSemester (formula Year + Semester, possibly indexed if your DB supports that) 

如果你真的需要一个号码,那么你可以摆脱YearSemester领域,增加一个序列字段,并成立了一个触发器,会做年+学期连接并在每次插入/更新/删除时相应地分配序列号。

相关问题