Database design 为数据库中的列定义值的最佳方法

Database design 为数据库中的列定义值的最佳方法,database-design,data-structures,Database Design,Data Structures,这是一个非常探索性的问题。假设我们正在为一所大学设计一个数据库;这个地方以学期为基本教育时间单位。一年有两个学期,夏季有半个学期。它们被称为术语,作为描述它们的一种方式。如果我们想在某个时间点(比如2012年秋季、2013年春季或2013年夏季)为一个术语指定一个整数,您认为最好的组合整数是什么 例如,2012年春季的最后一个数字是术语,是20121年吗 谢谢 好吧,正如我看到你将这个问题标记为数据库设计一样,我不得不讨论将整数分配给两个值:年份和季节。如果有多值字段,则不能在中有表 当您尝试对

这是一个非常探索性的问题。假设我们正在为一所大学设计一个数据库;这个地方以学期为基本教育时间单位。一年有两个学期,夏季有半个学期。它们被称为术语,作为描述它们的一种方式。如果我们想在某个时间点(比如2012年秋季、2013年春季或2013年夏季)为一个术语指定一个整数,您认为最好的组合整数是什么

例如,2012年春季的最后一个数字是术语,是20121年吗


谢谢

好吧,正如我看到你将这个问题标记为
数据库设计
一样,我不得不讨论将整数分配给两个值:年份和季节。如果有多值字段,则不能在中有表

当您尝试对其中一个字段运行查询时,这将给您带来复杂性。如果不解析数据,您将无法轻松回答诸如“您有多少不同的年份?”之类的简单查询。因此,我的建议是将您谈论的整数拆分为
Year
seasure
字段


现在,如果您坚持使用整数来存储这两个值。。。那么你的解决方案似乎很完美:)

不确定这是否适用于你的情况,但我在一所大学工作,已经遇到过这种情况。如果你的大学学年从秋天开始,那么你很幸运,因为秋天、春天和夏天已经自然地按时间和字母顺序排列,如果按升序排列的话。如果我需要一个可排序的组合,我会使用一个将年份和学期连接在一起的计算字段

这就是我的建议:

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

如果你真的需要一个数字,那么你可以去掉YearSerm字段,添加一个Sequence字段,并设置一个触发器来执行Year+Serm连接,并在每次插入/更新/删除时相应地分配序列号。

对术语进行非规范化的主要原因是因为一些简单的查询,例如“请给我这位教授从2006年夏天开始教授的课程。因为这个术语是一个整数,你可以对它进行数学运算以得到结果。你可以对规范化的表做同样的操作,但你也会有更多的灵活性。我的意思是,你可以用非规范化的解决方案做任何事情,但方式更简单。你为什么要这样做?”“当你不需要时”进行数学运算?这是不必要的处理,应该(必须?)进行avoided@sunbomb:“自2006年夏天以来”可以在一些数据库管理系统中用简单的
WHERE(yearColumn,semesterColumn)>=(2006,2)
来处理,这可能不属于主题,但为什么PeopleSoft学生信息系统(这里的主要大学系统)是使用一个类似的列作为它的术语?在这里,该列被称为strm,适用于任何一位PS专家。