在数据库设计时,存在多张表有关系时该怎么设计为最优?

例如,现在有个table_user 其中的字段有 id,username,age;又有一个角色表table_role,其中字段有id,rolename。这时候如果要给这两个表加入关系时,是在table_user表里面加入一个新的字段和table_role建立关系呢?还是再另外建立一张表,来保存这个表之间的关系比较好?

所谓的三范式了解就行,完全照做死得快
像你这种表,一定要先定义需求
比如用户有多个角色,就需要建立一个用户角色对应表
比如用户只有一个角色,那在用户表加个字段就行
另外最好不要弄什么外键之类的,原来我也弄,后来烦得要死,总是约束错误之类的,编个程序都不省心,结果全给去了,只要逻辑没有错误,数据就不会出错。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-03
我公司是做软件的 也设计到数据库的设计 刚好你说的 我们已经设计好了 而且我们不仅有你说的这些还有其他的
那么现在就说说你应该怎么做吧:需要3个表
第一:用户表 主要字段 id,name,age
第二:角色表 主要字段id,name
第三:用户角色表 table_userrole 主要字段:id,userid,roleid
说明:userid关联用户表的id,roleid关联角色表的id
好处:扩展性好 一个用户对应一个角色或对应多个角色没什么区别 便于管理 而且都是通过id管理(id一般是主键 有聚集索引 速度也快)
有问题可以随时找我 希望解决了楼主的问题追问

那么表的主键是设置为自动增长好,还是采用UUID这种形式的比较好呢?

追答

是的 让他自动增长
然后通过主外键关系 约束 以免产生垃圾数据
明白不?

第2个回答  2013-05-03
根据E-R模型,用户和角色是多对多的关系,所以,需要另建一张表保存他们之间的关系,才可以达到3NF。架构合理,扩展性才好,生命力才强
第3个回答  2013-05-03
加字段比较好,效率会高,但如果mapping的重复很高的话,会造成空间浪费,不过如果数据量小的话,无所谓了追问

加字段的话,会不会在进行CRUD操作时出现繁琐!,例如删除时,需要先删除关系,那么操作起来是否会带来麻烦!

追答

不会啊,只有你不加主外键关系就可以了

第4个回答  2013-05-03
只保留对方表的主键ID 就可以了,设置外键
相似回答