外键关联主键是否可以是varchar2字段?

KnowKjava 2010-04-03 09:17:03
比如表A,主键ID是varchar2
表B外键约束,某字段指向表A主键

不知道这样可以否?有什么不好的地方没?
以前这样写的时候,表A的主ID都是number型的说。
...全文
303 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yugiant 2010-04-10
  • 打赏
  • 举报
回复
当然是可以的,用某些可视化工具直接拖动是才不管你是什么类型呢
yurui05 2010-04-07
  • 打赏
  • 举报
回复
可以。不过一般这个主键不是自己输入的。而是插入记录的时候自动生成的md5码 可保证唯一
ojuju10 2010-04-07
  • 打赏
  • 举报
回复
可以为varchar2类型

类型的选择与字段里面的值有关系的
gll0809 2010-04-07
  • 打赏
  • 举报
回复
学习了
tangren 2010-04-07
  • 打赏
  • 举报
回复
外键所引用的主键是什么类型没有关系的。
但外键还是要谨慎使用,如果不是了解很透彻,可能全产生麻烦。
一般来说,可以通过程序来控制一部分逻辑。
fangpengyu 2010-04-06
  • 打赏
  • 举报
回复
可以的
duqiangcise 2010-04-06
  • 打赏
  • 举报
回复
完全支持。
bestdowt1314 2010-04-03
  • 打赏
  • 举报
回复
没关系,我们的数据库都是用这一类型
horizonlyhw 2010-04-03
  • 打赏
  • 举报
回复
恩 主要还是控制 和 类型没啥关系
codearts 2010-04-03
  • 打赏
  • 举报
回复
>外键关联主键是否可以是varchar2字段?

可以。

但是别忘了,外键上一定要建立索引,否则性能影响严重。

或者,别用索引了,用ORACLE做的系统都不加索引的。
tfwin2 2010-04-03
  • 打赏
  • 举报
回复
没有什么不好的,有时候我们主键就是用VARCHAR2的,只要这个主键不是用户随便输入的,而是你自己根据序列或时间生成的就好,如果用户自己输入,那确实有空格比较的问题。。。。
但是程序做的好,这些也没什么的。
1. 普通用户表(users) 字段名称 类型 记录内容 是否为空 备注 user_id Varchar2(50) 用户名 0 主键 password Varchar2(20) 密码 0 name Varchar2(20) 用户姓名 1 telephone Varchar2(20) 固定电话 1 mobile Varchar2(20) 手机 1 address Varchar2(100) 用户地址 1 email Varchar2(50) Email 1 管理员表(administrators) 字段名称 类型 记录内容 是否为空 备注 admin_id Varchar2(50) 用户名 0 主键 password Varchar2(20) 密码 0 id_number Varchar2(20) 身份证号 0 name Varchar2(20) 管理员真实姓名 0 telephone Varchar2(20) 固定电话 1 mobile Varchar2(20) 手机 0 address Varchar2(100) 管理员家庭地址 0 email Varchar2(50) Email 0 登录表(login) 字段名称 类型 记录内容 是否为空 备注 id Varchar2(20) 用户名 0 主键 password Varchar2(20) 密码 0 订单表(order) 字段名称 类型 记录内容 是否为空 备注 auto number 序号 0 主键,自增长 order_id Vachar2(100) 订单编号 0 user_id Varchar2(20) 用户id 0 外键(用户表) ticket_id Varchar2(40) 票编号 0 外键(票务信息) time Date 下单时间 0 票务信息(tickets) 字段名称 类型 记录内容 是否为空 备注 ticket_id Vachar2(100) 机票编号 0 主键 airline Varchar2(50) 所属航空公司 0 外键(航班信息) filght_number Varchar2(50) 航班号 0 外键(航班信息) cab Varchar2(50) 舱位类型 0 pirce number 舱位对应价格 0 外键(航班信息) 航班信息表(flight_info) 字段名称 类型 记录内容 是否为空 备注 filght_number Vachar2(30) 航班号 0 由航空公司提供,主键 start_time Varchar2(40) 出发时间 0 end_time Varchar2(40) 到达时间 0 range_type Varchar2(10) 往返类型 0 单程,往返 departure Varchar2(40) 始发地 0 destination Varchar2(40) 目的地 0 airline Varchar2(30) 航空公司 0 price number 机票基础价格 0 用户操作记录表(deal_log) 字段名称 类型 记录内容 是否为空 备注 auto number 用户编号 0 主键,自增长 user_id Varchar2(30) 用户id 0 外键(普通用户) op_type Varchar2(40) 操作类型 0 订票,退票,改签 ticket_id Varchar2(40) 机票编号 0 外键(票务信息) time Varchar2(10) 时间 0
售票系统设计⽅案 售票系统设计⽅案 1.架构设计 架构设计 1. 系统架构选型 系统架构选型 从软件架构⾓度,本系统采⽤了MVC分层的设计思想,各层级只需要关注本⾝的设计,⽽不需要关注其他层级的内部细节,层与层之间定义了良好的交互⽅式。具体⽽⾔,本系统可 以分为三个⽔平层,分别是展⽰层,业务服务层和数据库层;系统总体结构如下图所⽰。 2. 软件架构风格 软件架构风格 本系统采⽤浏览器-服务模式(B/S模式),该模式是Web兴起后的⼀种⽹络结构模式。相⽐较传统的C/S模式,B/S结构的重要特征就是分布性强、开发简单、共享性强、总体拥有 费⽤低。这种模式统⼀了客户端,将系统功能实现的核⼼部分集中到服务器上,简化了系统的开发、维护和使⽤。 BS架构优势总结如下: 分布性强,客户端零维护。只需有⽹络、浏览器,能够随时随地实⾏查询、浏览等业务处理。 业务扩展简单便利,通过添加⽹页就可以添加服务器功能。 维护简单便利,只须要更改⽹页,就可以完成全部⽤户的同步更新。 开发简单,共享性强。 2. 业务概念原型 业务概念原型 1. ⽤例设计 ⽤例设计 ⽤户主要功能:⽤户注册、⽤户信息维护、查找车票、购买车票、改签及退票 后台管理员主要功能:列车信息维护、站点信息维护、车次设置 2. UML类图设计 类图设计 根据业务需求描述,结合⾯向对象的思想,抽象出类、属性、⽅法,同时确定概念之间的关系,构建UML类图: 3. 数据库设计 数据库设计 采⽤关系数据库mysql进⾏设计 ( (1)⽤户表 )⽤户表 ( (2)⾓⾊表 )⾓⾊表 ( (3) ) ⽤户⾓⾊关联表 ⽤户⾓⾊关联表 ( (4) ) 车次表 车次表 ( (5) ) 列车表 列车表 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 userId int 主键 account varchar 账号 password varchar 密码 name varchar 姓名 sex varchar 性别 phonenum number 电话号码 certificate_type varchar 证件类型 certificate_num number 证件号码 authority varchar 权限 info varchar 其它信息 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 roleId int 主键 role_type varchar ⾓⾊类型 authority varchar 权限 descr varchar 描述 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 urId int 主键 userId int ⽤户主键外键】 roleId int ⾓⾊主键外键字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 trainSequenceId int 主键 trainNum number 车次号 trainId int 列车号 start_station varchar 起点站 end_station varchar 终点站 launch_time datetime 启动时间 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 trainId int 主键 ( (6) ) 车厢表 车厢表 ( (7) ) 座位表 座位表 ( (8) ) 站点表 站点表 ( (9) ) 车次站点表 车次站点表 ( (10) ) 订单表 订单表 trainName varchar 列车名称【外键】 type varchar 列车类型 carriage_num int 车厢数 status int 状态 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 carriageId int 主键 trainId int 列车主键外键】 carriage_number int 车厢号 carriage_type int 车厢类型 price_coef int 价格系数 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 seatId int 座位主键 carriageId int 车厢主键外键】 trainId int 列车主键外键】 seat_number int 座位号 bitmap int 座位站点状态位图 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 stationId int 站点主键 name varchar 站点名称 descr varchar 站点级别 字段名称 字段名称 字段类型 字段类型 字段描述 字段描述 train_sta_Id int 车次站点主键 trainSequenceId int 车次主键外键】 station_sequence int 站点序列 arrive_time datetime 到达

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧