经验帝入。外键该用"用户ID"还是"用户名"?

fihuang 2010-08-01 04:11:46
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗?
诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
...全文
3494 58 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)
一、引言 随着互联网的快速发展,电子商务已成为人们日常生活中不可或缺的一部分。一个成功的电子商务平台需要一个稳定、高效、可扩展的数据库系统来支持其运营。本课程设计旨在构建一个适用于电子商务平台的数据库系统,以满足用户注册、商品浏览、购物车管理、订单处理等功能需求。 二、需求分析 用户管理:系统需要支持用户注册、登录、个人信息修改、密码找回等功能。 商品管理:系统需要支持商品的添加、修改、删除、查询等功能,同时需要记录商品的详细信息,如名称、价格、库存、描述等。 购物车管理:用户可以将心仪的商品加入购物车,查看购物车中的商品,修改购物车中的商品数量,以及清空购物车。 订单管理:用户可以提交订单,查看订单状态,取消订单等。系统需要记录订单的详细信息,如订单号、用户ID、商品ID、数量、总价、支付状态等。一、引言 随着互联网的快速发展,电子商务已成为人们日常生活中不可或缺的一部分。一个成功的电子商务平台需要一个稳定、高效、可扩展的数据库系统来支持其运营。本课程设计旨在构建一个适用于电子商务平台的数据库系统,以满足用户注册、商品浏览、购物车管理、订单处理等功能需求。 二、需求分析

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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