关于表结构的设计问题
三张表:
工程表 论文表 获奖表
工程和论文都可以分别获奖
我想在工程表和论文表都设一个是否获奖的字段,当未获奖时填0,若获奖了就对应获奖表里的ID,不知道这样做合理不?
或者,在获奖表里加两个工程ID和论文ID,分别对应工程表里的ID和论文表里的ID,这两种方法哪个好,或者有更好的办法,谢谢大家了先~~~~~
------解决方案--------------------第一种方法可以,但不太好
第二种方法不对,不能那样设计,应该有个标记字段,标记是哪种类型得的奖就可以了,这样方便扩充,也方便查询.此为上策
------解决方案--------------------兩種方法都不好。
第一種:获奖表根本就是多余,你可以用視圖來生成
第二種:獲獎表隻需要一個字段即可,前綴以區分是哪個獲獎級別。比如 "0 "代表工程表,“1”代表論文表, "0001 "代表工程表中001ID的獲獎
------解决方案--------------------这样设计比较合理:
在工程表和论文表中添加获奖ID字段,也就是工程表和论文表引用获奖表
------解决方案--------------------第一个不错啊!偶觉得可行!
------解决方案--------------------获奖表--------IDKye,type,ID
IDKey为主键﹐类型可以设置别的表也可以定列一个规则(如工程表—gbhz, 论文表—lwhz)以后还有别的状可以再加入﹐ID为对应的表的ID了。
查询的时候主要查询对应的类型就可以知道那个什么的呀
------解决方案--------------------是啊,第一种方法操作起来就是两张表,得用事务做的,有没有更好更简单的办法呢?
-----------
用触发器也可以啊
------解决方案--------------------再建个表 用来管理文章和获奖的关系
------解决方案--------------------事务是为了保证数据的一致性和完整性,就你现在的情况,用的没错
触发器是数据库的功能,就你现在的情况,在数据库中建立一个触发器,当完成向获奖表插入一条信息后,触发对应表的数据更改事件。这样可以不用事务程序代码量少点。
------解决方案--------------------当未获奖时填0
——————————————————————————————————————————
当未获奖时保持为null。不要随便混淆数据类型,如果没有或者未知(注意,包括未知),不要用一个自认为可以区分的值,应该用系统专门用来表达这种情况的值。
------解决方案--------------------帮顶,学习
------解决方案--------------------我觉得第一种和第二种都可以的
但是按说在查询起来第一种要比第二种速度快一些
我事倾向于第一种方法
------解决方案--------------------如果你的 工程 和 论文 都可能是 获取
多种奖励
那么
数据库 的设计 应该是 工程和论文 对于 获奖表 是 1 对 多 关系
合理的 数据库 设计不要光想到在一个表 查询就快
还要考虑 扩展 和实际使用中的 关系
------解决方案--------------------第二种方法可行,不过字段设计得改一下,用一个字段存工程表、论文表各自对应的ID,再设计一个标记字段用来区分是工程还是论文获得奖,这样以后查询也比较好处理。