社区
C#
帖子详情
经验帝入。外键该用"用户ID"还是"用户名"?
fihuang
2010-08-01 04:11:46
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗?
诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
...全文
3510
58
打赏
收藏
经验帝入。外键该用"用户ID"还是"用户名"?
我看过的科班的sql教材都是用"用户ID"做外键,但是在实际应用中需要用到是用户名,用"用户名"做外键有什么不妥吗? 诚心请教有经验的前辈,你们在实际项目中,碰到这样的情况是怎么处理的?是用UserID还是UserName或者两个一起用?
复制链接
扫一扫
分享
转发到动态
举报
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)
phpwind9.x如何从数据库更改
用户
名
或者
用户
ID
?共
该系统基于MySQL数据库,
用户
信息存储在`pw_user`表中,包含字段如`u
id
`(
用户
ID
)、`username`(
用户
名
)等。更改
用户
名
或
用户
ID
涉及直接操作这些字段,但必须谨慎处理,因为这可能会影响到其他关联的数据。 **更改...
电子相册系统mysql数据库设计
其中,所属相册
ID
是与albums表的
外键
关联,所属
用户
ID
是与users表的
外键
关联。 标签表(tags)用于存储标签信息,包括标签
ID
、所属相册
ID
、标签名称、创建时间和更新时间等字段。其中,所属相册
ID
是与albums表的...
表情包开放平台系统mysql数据库设计.zip
- 使用记录表(Usage):记录
用户
在聊天中使用表情的情况,包括使用
ID
(主键)、
用户
ID
(
外键
)、表情
ID
(
外键
)、使用时间。 5. **权限与审核**: - 权限表(Permission):定义不同
用户
角色的权限,如上传表情...
数据库课程设计-基于的宝宝成长记录分享系统的建表语句.sql
该表应包含宝宝的唯一标识(如宝宝
ID
)、与之关联的
用户
ID
(
外键
)、宝宝的姓名、出生日期、性别等字段。宝宝
ID
也会被定义为这个表的主键。为保证数据的完整性和逻辑性,关联的
用户
ID
作为
外键
与
用户
信息表的
用户
ID
...
一个电子商务平台的数据库设计.pdf
- **购物车表(cart_table)**:包含购物车
ID
(主键)、
用户
ID
(
外键
)、商品
ID
(
外键
)和数量等字段。 - **订单表(order_table)**:包含订单
ID
(主键)、
用户
ID
(
外键
)、订单时间、支付状态等字段。 - **订单明细...
C#
111,101
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章