3

我要评价(非常好、好、中等、差...) 2 个对象:学生和教师。哪种设计方案更好?

解决方案1:

学生(学生证、评分、...)

-----------------1--------好-----

-----------------2--------坏-----

------3--------非常好-----


教师(TeacherID、评分、...)

------1-----非常好-----

-----------------2--------坏-----

-----------------3--------坏-----

解决方案2:

学生(StudentID、RatingTypeID、...)

------------------1----------------2----------

------2----------------1----------

------------------3----------------3----------


教师(TeacherID、RatingTypeID、...)

------------------1----------------1----------

------2----------------1----------

------------------3----------------3----------


RatingType(RatingID, RatingDescription,...)

------1-------------非常好---------

-----------------2---------------好--------------

-----------------3----------------坏-------------


如果两者都不够好,您能给我一些建议吗?谢谢!

4

2 回答 2

2

解决方案 2 是这两个中最好的,但是如果您想在应用程序的生命周期中获得多个投票,您应该有一个表格来确定投票的主题,并在另一个表格中存储投票:

Student:
   id
   name
   class
   ...

Teacher:
   id
   name
   subject
   ...

voterType
   id 
   description (student or teacher)

contest:
   id
   description (ex: 1st Semester 2013)

contestVotes:
   id
   contestId
   voterType (Teacher or Student)
   voterId
   ratingTypeId
于 2013-10-27T18:12:32.050 回答
1

在两个建议的解决方案之间,我肯定会选择第二个,原因如下:

  • 在涉及排序或聚合的情况下,将 a 存储Rating为数字会很方便,在这种情况下,字符串几乎没有用处。

  • 使Rating列成为外键RatingType.RatingID强制执行一个约束,即 aRating只能具有来自非常特定集合的值,具有非常特定的含义。此外,您将来可能会在RatingType表格中添加额外的列,从而为您的评分增加价值。

至于改进建议,既然你问了,请考虑使用IS-A 关系来实现它。教师和学生显然两者兼而有之Persons,并且在一定程度上具有共同的属性。我将创建一个Person包含通用属性(即名字、姓氏、地址、电话等)的超类表,然后将主键studentsteachers外键设为Persons.

请注意,评级也是一个常见的属性。所以出现在Persons表格中是很自然的。当然,除非教师和学生有不同类型的评分,在这种情况下,您必须实现两个不同的RatingType表。

于 2013-10-27T18:45:57.370 回答