关于数据库设计的一个思索这样做是不好的

先附上图给大家看

今日在设计这个数据库的时候突发灵感,我想:在设计教师表、外聘教师表和授课教师表的时候,是否可以运用面向对象中的知识呢?

三个表是今天我们要讨论的焦点,其他表可以先不看。在这个设计中,教师和外聘教师是两类不同的教师,教师拥有自己的ID而外聘教师也拥有自己的ID,如何通过给出的一个ID判断其是教师还是外聘教师?是哪一个教师还是那一个外聘教师呢?我想了很多办法,但是我最终确定了一个办法,这就是建立另外一个表存储两者的信息,通过这个新加入的表来判断。接着,我看到了教师和外聘教师表中都有共同的属性:性别、宅电、手机号等。于是,我很自然地想到了在面向对象中所学的知识,将其共同属性提出来建立一个新“类”,这个新“类”就是“授课教师表”。将这些共同的属性提到授课教师表中后,我使用教师表和外聘教师表分别继承这个表,然后再保留教师表和外聘教师表中特有的属性,这不是很好么?我很得意。可是当我去掉教师表和外聘教师表中这些共同的属性后,当我看到“赤裸”的教师表和外聘教师表的时候,我突然想到——我错了。我认为这样设计固然可以,这样设计节省了存储空间,加快了查询速度等;但是这违背了基本的设计思想。教师表就应该存储教师表的东西,外聘教师表亦然,授课教师表亦然如此。为什么,因为在面向对象中,子类继承了父类,而数据库中并非这样,如果要实现教师表或者外聘表共有的属性需要通过双表链接来进行操作,这样和面向对象是不一样的。而且,不能滥用面向对象。

PS:各位网友看看我这样设计还有什么需要更正之处或者改善之处,谢谢大家给我提好的建议。这是老师给我的第一个真题,因此我要好好完成它。

原文地址:https://www.cnblogs.com/iPeterRex/p/1302324.html