我就以 班级表 与 学生表 来举例吧, 班级表好比A 学生表好比B.
班级表 ( 班级ID, 班级名称, 班级其他信息...... ) 主键是 班级ID
学生表 (学号, 所属班级ID, 姓名,性别 ...... ) 主键是 学号, 外键是 所属班级ID
学生表的 外键的字段名称, 可以与 班级表的 主键列的字段名称不一样。
例如上面的, 班级表里面, 字段名称是 “班级ID”。 学生表里面, 字段名次是“所属班级ID”
名称可以不同, 但是数据类型要一样。
至于 这个学生表里面, 主键是 仅仅 “学号”。 还是 (“学号”, “所属班级ID”)
一般情况下, 比较单纯的 一对多的情况下, 学生表的主键, 一个学号就足够了, 不需要带上“所属班级ID”。
对于 “多对多”的情况下, 才需要把外键作为主键。
例如:
学生表 (学号, 所属班级ID, 姓名,性别 ...... ) 主键是 学号
课程表(课程编号, 课程名, 学分 ......) 主键是 课程编号
学生选修情况表 (学号, 课程编号) 主键是 (学号, 课程编号) 2个外键,学号依赖学生表, 课程编号依赖课程表
对,引用字段称为外健,B表字段引用了A表,这个字段就叫外健,可建关健约束
AB两表主键不同,但B表的外键一定是A表的主键,B表的字段,字段类型一定和A表的字段,字段类型一致
很多人用powerdesigner设计数据库,都喜欢直接使用默认生成的主外键名称,我也是不太注意这个外键的名称,默认都是这样的FK_relation_XX,通常这个XX是一个数字;由于业务的变化和数据库的多次调整;这个数字本身就没有什么意义,如果对数据库的修改并不是每次修改都从设计文件开始修改然后在数据库建立同样名称的字段和外键,那时间久了一定会出现外键名字数据库和设计文件对不上的情况,后面再对数据的结构做调整就会显得冲突越来越多了 如果一开始就将外键的名称使用人工编辑的方式编辑为有意义的名称,就可以降低自动生成外键名称引起冲突的几率,也使数据库抛出外键异常的时候就直接可以根据外键约束的名称判断出是哪个表之间的问题。 看来还是那句话,慢工出细活,这种细都是有实际意义的细节,而不是锦上添花的东西。