用户访问数据库的过程

 
现以用户通过应用程序读取一个记录为例,说明用户访问数据库过程中的主要步骤
( 1)用户在应用程序中,首先要给出他使用的子模式名称,而后在需要读取记录处嵌入一个用数据操作语言书写的读记录语句(其中给出要读记录的关键字值或其它数据项值)。当应用程序执行到该语句时,即转入DBMS的特定程序或向DBMS发出读记录的命令。
( 2)DBMS按照应用程序的子模式名,查找子模式表,确定对应的模式名称。可能还要检验操作的合法性,核对用户的访问权限,如果通不过,则拒绝执行该操作,并向应用程序状态字回送出错误状态信息。
( 3)DBMS按模式名查阅模式表,找到对应的目标模式,从中确定该操作所涉及的记录类型,并通过模式到存储映射(往往也在模式中)找到这些记录类型的存储模式。这里还有可能进一步检查操作的有效性、保密性。如不通过,则拒绝执行该操作并回送出错误状态信息。
( 4)DBMS查阅存储模式,确定应从哪个物理文件、区域、设备、存储地址、调用哪个访问程序去读取所需纪录。
( 5)DBMS的访问程序找到有关的物理数据块(或页面)地址,向操作系统发出读块(页)操作命令。
( 6)操作系统收到该命令后,启动联机I/O程序,完成读块(页)操作,把要读取的数据块或页面送到内存的系统缓冲区。
( 7)DBMS收到操作系统I/O结束回答后,按模式、子模式定义。将读入系统缓冲区的内容映射为应用程序所需要的逻辑纪录,送到应用程序工作区。
( 8)DBMS向应用程序状态字回送反映操作执行结果的状态信息,如“执行成功”、“数据未找到”等。
( 9)记载系统工作日志
( 10)应用程序检查状态字信息。如果执行成功,则可对程序工作区中的数据作正常处理;如果数据未找到或有其他错误,则决定程序下一步如何执行。

 
 
 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
⽤户登录系统数据库表设计 ⽤户登录系统数据库表设计 最近看了看公司后台⽤户登录系统的设计, ⽐较混乱, 主要还是因为URS和Oauth以及URS第三⽅这三个登录形式各不相同导致的。 下⾯着重介绍⼀下涉及到第三⽅登录中需要注意的问题 在⼀个新项⽬中, 如果是要建⽴⾃⼰的登录体系的话, 那么直接创建⼀个Users表,包含username和password两列,这样,就可以实现登录了: id " username " password " name等其他字段 ----+----------+----------+---------------- A1 " bob " a1b23f2c " ... A2 " adam " c0932f32 " ... 如果要让⽤户通过第三⽅登录,⽐如微博登录或QQ登录,怎么集成进来呢? 以微博登录为例,由于微博使⽤OAuth2协议登录,所以,⼀个登录⽤户会包含他的微博⾝份的ID,⼀个Access Token⽤于代表该⽤户访问微博的API和⼀个过期时间。 要集成微博登录,很多童鞋⽴刻想到把Users表扩展⼏列,记录下微博的信息: id " username " password " weibo_id " weibo_access_token " weibo_expires " name等其他字段 ----+----------+----------+----------+--------------------+---------------+---------------- A1 " bob " a1b23f2c " W-012345 " xxxxxxxxxx " 604800 " ... A2 " adam " c0932f32 " W-234567 " xxxxxxxxxx " 604800 " ... 加⼀个QQ登录Users表就⼜需要加3列,⾮常不灵活 那么我们需要对这个表进⾏拆分。当⽤户以任意⼀种⽅式登录成功后,我们读取到的总是Users表对应的⼀⾏记录,它实际上是⽤户的个⼈资料(Profile),⽽登录过程只是为了 认证⽤户(Authenticate),⽆论是本地⽤密码验证,还是委托第三⽅登录,这个过程本质上都是认证。 所以,如果把Profile和Authenticate分开,就⼗分容易理解了。Users表本⾝只存储⽤户的Profile, 其中ID为关联不同登录⽅式的外键。 id " name " birth等其他字段 ----+------+----------------- A1 " Bob " ... A2 " Adam " ... ⽽通过⽤户名⼝令登录可视为⼀种Authenticate的⽅式,利⽤LocalAuth表维护: id " user_id " username " password ----+---------+----------+----------- 01 " A1 " bob " a1b23f2c 02 " A2 " adam " c0932f32 通过微博登录可视为另⼀种Authenticate⽅式,利⽤OAuth表维护, 但是access_token⼀般情况也只有⼏个⼩时的时效, 所以存储它是没有意义的, 每次登录的时候去微博后台 验证⼀下客户端传来的token就⾏了。 如果⽤户只⽤了第三⽅登录, 那就拿第三⽅数据来填充刚才的User表即可。 id " user_id " weibo_id " ----+---------+----------+ 11 " A1 " W-012345 " 12 " A2 " W-234567 " 如果要添加另⼀种OAuth登录,⽐如QQ登录,那就再加⼀个列标⽰不同站点也就OK了, 但是要注意⽤户在不同登录⽅式的⽤户名和photo⼀般不⼀样, 所以也单独存起来 id " user_id " oauth_name " oauth_id " nick_name" photo" ----+---------+------------+----------+----------+------+ 11 " A1 " weibo " W-012345 " 12 " A2 " weibo " W-234567 " 13 " A1 " qq " Q-090807 " 14 " A2 " qq " Q-807060 " 通过这种⽅式, ⽆论⽤户采⽤哪种⽅式登录, 都可以锁定到⽤户的user_id。 下⾯再说⼀下⽹易的URS登录, 因为我们要直接采⽤⽹易通⾏证, 所以也就不需⾃⼰存储密码, 因此我们的架构应该设为User表 id " user_Email " username " birth ----+------------+----------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值