学生,老师,管理员这些都是用户,在程序里可以用继承来,可是表不知道怎么设计,有些属性学生有,老师没有,是不是要在数据库里为学生,老师,管理员的信息单独建一张表呢?

解决方案 »

  1.   

    一般来说,有三种处理方式吧。第一种是把学生、老师、管理员的所有字段全放用户表,加上一个type字段,标明是学生、老师还是管理员,没有的属性可以留空,查询的时候根据type字段判断,坏处就是冗余很多,种类多了表列数会很多,好处是查询和更新不用做表关联,只对一张表操作,比较省事。第二种就像楼主说的学生、老师、管理员三张表互不相关,同样的属性每张表都有同样的字段就好,好处是维护最简单方便,坏处是三张表看不出任何逻辑关系。第三种是用户相关的信息建一张表,然后分别建学生、老师、管理员三张表,这三张表的主键为用户表的外键,即学生、老师、管理员的记录必须在用户表里面先存在,然后公共属性放用户表,不同的属性放三张表,每插入更新一条记录的时候根据不同类型插入或更新学生或老师或管理员表,保证一对一关系,好处是分开管理互不影响,但又有对在联系,坏处是每次都要维护两张表,复杂一些。我一般采用第三种吧,看楼主怎么选。
      

  2.   

    这是没办法的事,在数据库技术没有新的突破之前,所谓继承,就只有这三种,没有其他,SQL本来就不是面向对象的东东。