征求数据库设计方案
比如,销售员,会员,等人员都有各自的属性(姓名,年龄...),但同时也有公共的属性(性别,职位...)
那么,是应该在每种人员的表里都设置这些公共属性呢还是把公共属性单拿到一张表里让人员表和它关联呢?
谢谢
问题点数:50、回复次数:7Top
1 楼xg_delayth(铁鹰)回复于 2002-06-27 08:36:28 得分 10
我认为放在一张表中比较好,因为具我的经验来看,以后要对这些记录进行频繁的查询时,一张表的查询速度肯定要比多张的连接查询速度上要快,而且维护相对比较容易,索引也比较好建!Top
2 楼hainiao1979(hainiao1979)回复于 2002-06-27 08:48:20 得分 5
楼上说的也对,不过两种方案各有利弊,把表模型设计成面向对象的继承的关系,可以在你统计,某些查询的时候非常方便,但可能更多的地方会带来复杂性。Top
3 楼penitent(只取一瓢)回复于 2002-06-27 08:53:01 得分 5
这个应当建在一张表中,从数据库设计的范式来看,建立在一张表是符合数据库设计范式的,性别,职位其实也并不是公用啊,它也是从属于人员(编号,假定为主键)Top
4 楼mycode(不写代码)回复于 2002-06-27 09:10:38 得分 20
这种情况,涉及一个父类(人员),两个子类(销售员,会员).如果不考虑两个子类在系统中的其他方面,父类和子类之间是继承关系,一般转化为关系模型是这样的:
它们之间的关系是一对一,因此,既可以是一张表,也可以两张表或三张表。
一张表的写法:对象标识(主键)、父类属性(性别、职位),子类类别(会员、销售员)、会员属性(),销售员属性。
两张表的写法:会员表(对象标识,父类属性、会员属性)、销售员表(对象标识,父类属性,销售员属性),两个表之间没有任何关系
三张表的写法:普通人员表(父类属性,对象标识)、会员表(对象标识,会员属性)、销售员表(对象标识,销售员属性)。会员表与普通人员表之间是一对一关系,销售员表和普通人员表之间也是一对一关系,会员表与销售员表之间的对象标识没有相同的数据,但两者的数据的集合等于普通人员的数据。
随着子类的增加,三种方案,一张表就是增加字段;两张表就是再增加一张表;三张表的写法,也是增加一张表,但需要注意关系。
具体采用哪种方案,还需要看这些类在整个系统中的用法。
还有其他的采用纵表方式设计,则是另一种方式,只是听说过,从没有见有在大型系统中用过。Top
5 楼hillhx(曾经的曾经)回复于 2002-06-27 13:00:47 得分 4
我建议使用楼上的3表写法,比较符合关系数据库的逻辑,但3表写法在修改与编辑时比较麻烦,如果你想当专家,那使用3表法,也就是说,对每个可以认为是类的事物生成一张表,另外3表写法最好可以搭配视图使用,才比较清楚,否则外行容易弄乱了。
如果仅仅是个一般的系统,你又不想炫耀你对关系数据库的深刻理解,那还是用1表写法或2表写法吧,编程非常容易,也好懂好维护,就是多点空余,记住是空余而不是臃余,因为你只是多了空字段,并没有多保存无用数据:)Top
6 楼Michaelyfj(星星还是那颗星星)回复于 2002-06-27 13:08:35 得分 3
放在一起好啊Top
7 楼zhoubf725(zhoubf725)回复于 2002-06-27 13:35:49 得分 3
主要还是要看全局应用来考虑,单纯的从这两个表看问题的话,会被范式所累,我们容易只见树木不见森林。两种方案的利弊,都在上面,还是楼主结合具体应用的灵活性来全局考虑。Top




