首页 新闻 会员 周边

难倒了很多人的两个数据库问题!!

0
悬赏园豆:10 [已解决问题] 解决于 2010-07-15 10:47

昨天去面试碰到这样两个数据库问题。
Q1。有三张数据库表,一个是User表,一个是 Role表,一个是Function表。
要求把这三张表的结构设计出来。
具体要求:
1。环境是SQL Server数据库

2。User表与Role表是多对多的关系
3。Role与Function表也是多对多的关系

Q2。数据库的User表里有一个叫做roles的字段,该字段里存放的值是像这样一些数据‘12,1,3,413,5,1’

具体要求:

1。请用一条SQL语句把这张表里roles字段里由每个逗号分隔开来的数字有等于1的记录查询出来(注意,像12这样的数字是不满足要求的)

JeffLiang的主页 JeffLiang | 初学一级 | 园豆:43
提问于:2010-07-14 10:20
< >
分享
最佳答案
0

有点像用户权限表设计一样

收获园豆:5
tiger longhu | 初学一级 |园豆:35 | 2010-07-14 11:58
User表的结构 create table [User] ( UserID int identity(1,1) primary key not null, UserName varchar(50), Roles varchar(100) ) create table [Role] ( RoleID int identity(1,1) primary key not null, RoleName varchar(50), ) 现在假如说User表里有这样两条数据: UserID UserName Roles 1 Stefan 1,13,31 2 James 1,2 同时Role表里有这样一条数据: RoleID RoleName 1 Manager 我认为这样就实现了User与Role表的多对多?我不太确定。
JeffLiang | 园豆:43 (初学一级) | 2010-07-14 12:21
@Jeffrey.Liang:一个用户对应多个角色,我们现在正在做的项目就是这样的。数据库中不使用主外键关系在程序中控制
tiger longhu | 园豆:35 (初学一级) | 2010-07-14 14:53
其他回答(2)
0

SELECT * FROM User WHERE CHARINDEX(',1,',','+roles+',')>0

这也会难倒许多人?有点夸张吧

我给你解决第一个问题:

user 表:UserID(编号) UserLogoName(登陆名字) UserRealName(真实姓名),roles                   (权限字符号串如‘1,2,3’)

Roles 表:RoleID(编号) RoleName(名称) functions(功能字符串 如:1,2,6 等)

Functions表:FID(编号) FName(名称)

说明:roles 和functions字段时间彼此多对多的关系

收获园豆:5
觉知的凡夫 | 园豆:468 (菜鸟二级) | 2010-07-14 10:29
怎么还不给分?
支持(0) 反对(0) 觉知的凡夫 | 园豆:468 (菜鸟二级) | 2010-07-14 11:08
@传说哥: 兄弟,你用的这个函数很巧妙的解决了这个问题。我等另外一个问题解决后,会给你加分的!
支持(0) 反对(0) JeffLiang | 园豆:43 (初学一级) | 2010-07-14 12:22
0

沙发,哈哈

祈晴 | 园豆:205 (菜鸟二级) | 2010-07-14 10:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册