社区
C#
帖子详情
经验帝入。外键该用"用户ID"还是"用户名"?
fihuang
2010-08-01 04:11:46
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗?
诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
...全文
3749
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)
什么是逻辑
外键
?我们要怎么实现逻辑
外键
?
逻辑
外键
(Logical Foreign Key)是一种不依赖数据库约束,仅通过业务逻辑和字段语义来维护表之间关联关系的设计方式。它本质上是通过在表中定义一个具有特定含义的字段(如user_
id
)来表示与另一张表的关联(如关联user表的
id
,这个也叫user_
id
也行,见名知意嘛),但数据库层面不设置约束。
【MySQL从小白到高手】第四篇:
外键
约束详解和表的设计思路
目录前言 MySQL的约束~表的设计FOREIGN KEY~简述~:foreign key :
外键
约束 (针对两张表,进行了关联~~)语法格式~: 案例背景~:假设有两张表~每个学生都得属于一个具体的班级,这个班级得存在!!!如果学生表这里出现了一个记录,班级class
id
是10000,此时这样的数据就是非法的~~这种情况下就可以使用
外键
约束来描述这种关系.学生表依赖了班级表.就把学生表称为"子表",班级表称为"父表".操作案例~:创建
外键
约束一个基本写法~
外键
约束写在创建表的末尾,描述的是两张表的
数据库中的键:主键、候选键、
外键
与超键的实战解析
本文深入解析数据库中的键(主键、候选键、
外键
与超键)及其在实际项目中的应用。通过电商系统、物流系统等实战案例,详细探讨了各种键的设计策略、性能优化技巧及常见陷阱,帮助开发者构建健壮、高效的数据库结构。
数据库中的键:主键、超键、候选键与
外键
的实战解析
本文深入解析了数据库设计中主键、超键、候选键与
外键
的核心概念与实战应用。通过对比分析,厘清了各类键的定义与关系,并结合电商系统等实战案例,重点探讨了主键(自然主键与代理主键)的选择策略、
外键
的利弊权衡,为构建高效、健壮的数据库架构提供了关键指导。
最详细,最通俗易懂的mysql
外键
的应用
mysql
外键
的理解应用 首先,我们先探讨一下
外键
有啥用。我的个人理解是根据项目的
经验
来的。 这里有两个表,如果你想让其中一个表的一行数据的update或者delete会影响到另外某个表的某一行,可以使其同步的update或者delete(也有可能产生其他影响),用
外键
级联删除可以实现。建立
外键
的过程中还会自动的建立索引,这样做有啥好处呢? 往下看会找到答案。 USE hxgpstest; ...
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章