社区
C#
帖子详情
经验帝入。外键该用"用户ID"还是"用户名"?
fihuang
2010-08-01 04:11:46
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗?
诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
...全文
2653
58
打赏
收藏
经验帝入。外键该用"用户ID"还是"用户名"?
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗? 诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
58 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jointan
2010-08-03
打赏
举报
回复
1
如果UserName不能修改的话,还是UserName做外键吧,如果你的UserID不起任何可能影响日后排序功能的话,建议,删除该字段,没什么用.
xinv19shi
2010-08-03
打赏
举报
回复
UserID
fihuang
2010-08-03
打赏
举报
回复
1
再说明一下,UserID和UserName都是唯一的,UserName一旦注册以后将不能修改。
大家再看看用哪一种方式比较好:
1.一个字段:UserID做外键,通过表连接或者查询两次。
2.一个字段:UserName做外键。
3.两个字段:UserID做外键,增加UserName字段。
4.两个字段:UserID和UserName都做外键。
我觉得应该选择方案3. 大家怎么看?
daone
2010-08-03
打赏
举报
回复
[Quote=引用 7 楼 fdh120 的回复:]
引用 4 楼 fihuang 的回复:
用户ID是唯一,用户名也是唯一的。为何楼上的都说用UserID
如果用UserID,每次都要通过UserID去获取UserName,这样很耗资源;如果UserID和UserName一起用的话,就不符合数据库表设计的基本原则。
用户ID和用户名都唯一,那你用户表里只保存其中一个字段不就完了,为什么还设两个字段?不感觉有点多余吗??
[/Quote]
用户名可能出现变动,但用户ID是不变的
mac_uestc
2010-08-02
打赏
举报
回复
1
[Quote=引用 7 楼 fdh120 的回复:]
引用 4 楼 fihuang 的回复:
用户ID是唯一,用户名也是唯一的。为何楼上的都说用UserID
如果用UserID,每次都要通过UserID去获取UserName,这样很耗资源;如果UserID和UserName一起用的话,就不符合数据库表设计的基本原则。
用户ID和用户名都唯一,那你用户表里只保存其中一个字段不就完了,为什么还设两个字段?不感觉有点多余吗??
[/Quote]
就像你有身份证了为什么不把名字丢掉....砖一个
hwbox
2010-08-02
打赏
举报
回复
1
一般都是用ID,用户名有时候会有改动。比如老板叫李明,他的用户名叫liming用了两个月,老板把你叫来了“老让我输这么长,给我改成lm!”
sxldfang
2010-08-02
打赏
举报
回复
1
id与用户名相比:
------------------
id操作快
id长度较用户名少
传id参数较方便
libinlink
2010-08-02
打赏
举报
回复
1
千万不要用用户名做外键。
重名的话,难道你要人家改名?
PalmerWang
2010-08-02
打赏
举报
回复
那就直接UserName做外键啊,有没有什么冲突,只要是唯一的就行
fihuang
2010-08-02
打赏
举报
回复
大家都说了这么多,我很矛盾,下面的3种选择真的不知道该怎么选。
3选1:
1.UserID做外键,通过表连接或者查询两次。
2.UserID做外键,但是增加一个UserName字段。
3.UserName直接做外键,删除UserID字段。
fihuang
2010-08-02
打赏
举报
回复
再说明一下,UserID和UserName都是唯一的,UserName一旦注册以后将不能修改。
大家再看看用哪一种方式比较好:
1.UserID做外键,通过表连接或者查询两次。
2.UserID做外键,但是增加一个UserName字段。
3.UserName直接做外键,删除UserID字段。
soaringbird
2010-08-02
打赏
举报
回复
用户名有时候需要复用,在历史上可能不唯一
Thr21ough
2010-08-02
打赏
举报
回复
毫无疑问应该用ID
leiziaitudou
2010-08-02
打赏
举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
为关联字段创建外键
所有的键都必须唯一
避免使用复合键
外键总是关联唯一的键字段
[/Quote]
用户id应该是标识列 所以不会重复
边城的刀声
2010-08-02
打赏
举报
回复
[Quote=引用 4 楼 fihuang 的回复:]
用户ID是唯一,用户名也是唯一的。为何楼上的都说用UserID
如果用UserID,每次都要通过UserID去获取UserName,这样很耗资源;如果UserID和UserName一起用的话,就不符合数据库表设计的基本原则。
[/Quote]
在数据量少的时候,可以遵循规范。
但在现在的Web下,大数据量的情况下,冗余也是好的,要不然就象你说的会很耗资源
mill_dhl
2010-08-02
打赏
举报
回复
用户名一般可以是字符串的,做主键进行判断的时候比较麻烦,所以一般用ID做主键
wanghui0380
2010-08-02
打赏
举报
回复
1
这种情况我们一般叫“逻辑id”和“物理id”
userid------作为数据的物理id标识
用户名---------是数据的逻辑id
一般来说中小型项目通常使用物理id做为标识
而大型项目往往使用逻辑id做标识
区别,大型项目因为数据量大,结构复杂,网络硬件配置复杂,网络结构复杂,存储介质复杂。他们通常采用分布式的数据存储介质和分布式的网络环境,而在分库,分表的情况下,数据库的物理id就不可预览了,所以更多情况下使用逻辑id作为标识
比如:银行系统通常使用不与数据库id关联的,账户号做标识。而电信系统则因为硬件环境的限定使用电话号码做标识(电信系统通常的前置机只认主叫号,被叫号这种逻辑标识,而不认你自己的数据库id)
porschev
2010-08-02
打赏
举报
回复
用主键ID。。。。。。。
hyblusea
2010-08-02
打赏
举报
回复
新建一个与业务逻辑无关的主键字段,作为外键
isaced
2010-08-02
打赏
举报
回复
id!!!!!!!!!!
加载更多回复(35)
电子相册系统mysql数据库设计
这个系统是一个基于MySQL数据库的系统,包含了
用户
管理、相册管理、图片管理、标签管理和图片与标签的关联关系管理等功能。
用户
表(users)用于存储
用户
信息,包括
用户
ID
、
用户
名
、密码、创建时间和更新时间等字段。 相册表(albums)用于存储相册信息,包括相册
ID
、相册名称、所属
用户
ID
、创建时间和更新时间等字段。其中,所属
用户
ID
是与users表的
外键
关联。 图片表(images)用于存储图片信息,包括图片
ID
、所属相册
ID
、图片路径、图片名称、所属
用户
ID
、创建时间和更新时间等字段。其中,所属相册
ID
是与albums表的
外键
关联,所属
用户
ID
是与users表的
外键
关联。 标签表(tags)用于存储标签信息,包括标签
ID
、所属相册
ID
、标签名称、创建时间和更新时间等字段。其中,所属相册
ID
是与albums表的
外键
关联。 图片与标签的关联表(image_tag)用于存储图片与标签的关联关系,包括图片
ID
和标签
ID
等字段。其中,图片
ID
是与images表的
外键
关联,标签
ID
是与tags表的
外键
关联。 通过这些表的设计,可以实现对
用户
、相册、图片和标签的增删改查等操作,并且
OA数据库设计.docx
OA数据库设计 OA数据库设计文档 1、
用户
信息表(UserInfo) 字段名称 字段含义 字段大小 是否为空 是否
外键
说明 User
Id
用户
id
Integer 否 否 主键自增 UserName
用户
名
Varchar(50) 否 否
用户
名
PassWord 密码 Varchar(50) 否 否 密码 Address 地址 varchar(500) 否 否 地址 Role
Id
角色
id
Integer 否 是
外键
, RoleInfo的Role
Id
UserState
用户
状态 Integer 否 否 0-正常,1-屏蔽 Depart
Id
部门
id
Integer 否 是
外键
,DepartInfo的Depart
Id
IsDelete 是否删除 Integer 否 否 0-未删除,1-删除 UserImage
用户
照片 varchar(50) 否 否
用户
头像 Status 是否在线 Integer 否 否 0-离线1-在线2-忙碌3-离开 2、人事档案表(personalfile) 字段名称 字段含义 字段大小 是否为空 是否
外键
说明 Pf
Id
档案编号 Integer
极简的MySql入门速成视频教程【完整版】
这是一套速成的入门级别的mysql数据库视频教程,的主要包含了以下技术:mysql环境配置、sql语句、使用可视化工具和cmd窗口连接mysql、聚合函数、求和、求最值、求平均数、数据分类汇总、分类汇总后过滤、分类汇总后过滤再排序、视图、索引、约束、存储过程、事务、数据库自动备份和还原、多表查询、左连接、右连接、取别名、限制查询结果、主键
外键
、可视化窗口、子查询、
用户
权限等技术。信息化如此繁荣的今天,每个人都应该掌握一些数据库使用的基本技术,希望大家通过本套教程的学习,顺利进入mysql数据库的大门!
飞机订票系统数据库表.docx
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
图书馆系统数据库结构设计.docx
图书馆系统数据库结构设计 组名:第三组 组员: 组长: 组员: 数据库功能: 本系统的主要目标是使用它的管理
用户
,包括系统管理员、普通
用户
,能很好的管理书籍库存工作,以及相应书籍的查询工作。比如管理员负责图书的日常管理工作,如各种基本信息的录入、修改、删除、查询操作以及动向查询,普通
用户
可以进行借阅前的查询。该系统包含图书的查询,图书的删除,图书的增加。借书,还书等功能。 数据库运行流程图: 数据库结构设计: 表一:学生信息表(电话号码,密码,姓名,学生
id
) 图书馆系统数据库结构设计全文共3页,当前为第1页。 主键:学生
id
图书馆系统数据库结构设计全文共3页,当前为第1页。
外键
:无 存储内容:学生的基本信息 表二:图书信息表(图书简介,图书数量,图书名称,图书
id
,图书价格,出版社信息,作者姓名,印刷版次,图书类型) 主键:图书
id
外键
:无 存储内容:图书的基本信息 表三:
用户
类型表(类型
id
,类型名) 主键:类型
id
外键
:无 存储内容:登陆
用户
的类型 表四:借书表:(
用户
id
,图书
id
,借阅时间,归还时间,续借与否) 主键:
用户
id
,图书
id
,借阅时间
外键
:
用户
id
,图书
id
存储内容:图书借阅的基本信息
用户
信息表
用户
类型 Sortname 空"非空
用户
ID
U
id
N
用户
名
UName N
用户
密码 Pwd N 电话 Phone Y 图书馆系统数据库结构设计全文共3页,当前为第2页。书籍信息表 图书馆系统数据库结构设计全文共3页,当前为第2页。 图书
ID
Book
ID
空"非空 图书名称 BookName N 图书数量 BookNum N 图书简介 BookRemark N 图书价格 BookPrise N 出版社信息 … N 作者姓名 Name N 印刷版次 … N 图书类型 BookStyle N
用户
类型表
用户
类型 Sortname Varchar(50) 借书表
用户
ID
U
id
空"非空 图书
ID
Book
ID
N 借阅时间 DateTime N 归还时间 DateTime N 是否续借 ReLend N 设计分工及各自完成情况: 一起想一起设计出来的 研讨次数,地点,内容和总结: 研讨了好多次,地点是在寝室,我们四个一个寝室,没事就讨论怎么做这个作业,慢慢的从无从下手到有了一点头绪,最后终于完成了今天的成品。总结来说从这个文档的制作中学到了挺多的东西,从网上的成熟文档中有一些借鉴,但他们写的也有瑕疵,我们就做了一些补充和修改。最后那个表格可能不符合标准,因为老师给的文档没能打开,所以不知道怎么做,他的表格是用来程序编写的,所以肯定会有出入,我们会在今后作出更正。东西是第一次做,肯定有做的不好的地方,但我们愿意秉着这个思路,在今后的学习中不断完善自己的作品,希望以后能有更大的收货。 图书馆系统数据库结构设计全文共3页,当前为第3页。 图书馆系统数据库结构设计全文共3页,当前为第3页。 图书馆系统数据库结构设计
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章