某企业网上书城系统的部分关系模式如下: 书籍信息表: books(book n

资格题库2022-08-02  79

问题 某企业网上书城系统的部分关系模式如下:书籍信息表: books(book no, book name, press no, ISBN, price, sale type, all nums),其中属性含义分别为:书籍编码、书籍名称、出版商编码、ISBN、 销售价格、销售分类、当前库存数量:书籍销售订单表: orders(order no, book no, book nums, book price, order date,amount),其中属性分别为:订单编码、书籍编码、书籍数量、书籍价格、订单日期和总金额。书籍再购额度表: booklimit(book no, sale_ type, limitamount),其中属性含义分别为:书籍编码、销售分类、再购额度;书籍最低库存表: bookminlevel(book no, leve) ,其中属性含义分别为:书籍编码,书籍最低库存数量;书籍采购表: bookorders(book no, order. _amount),其中属性含义分别为:书籍编码和采购数量。有关关系模式的说明如下:(1)下划线标出的属性是表的主码。(2)根据书籍销售情况来确定书籍的销售分类:销售数量小于1万的为普通类型,其值为0;1万及以上的为热销类型,其值为1。(3)系统具备书籍自动补货功能,涉及到的关系模式有:书籍再购额度表、书籍最低库存表、书籍采购表。其业务逻辑是:当某书籍库存小于其最低库存数量时,根据书籍的销售分类以及书籍再购额度表中的再购额度,生成书籍采购表中的采购订单,完成自动补货操作。【问题1】(5分)系统定期扫描书籍销售订单表,根据书籍总的销售情况来确定书籍的销售类别。下面是系统中设置某书籍销售类别的存储过程,结束时需显式提交返回。请补全空缺处的代码。CREATE PROCEDURE UpdateBookSaleType(IN bno varchar(20))DECLARE          all_nums number(6);BEGIN          SELECT (a) (book_nums) INTO all_nums FROM orders                  WHERE book_no = (b) ;IF all_nums < (c) THEN        UPDATE books SET sale_type = 0 WHERE book_no = bno;ELSE        UPDATE books SET sale_type = (d) WHERE book_no = bno;        END IF;        (e) ;END;【问题2】  (6分)下面是系统中自动补货功能对应的触发器,请补全空缺处的代码。CREATE TRIGGER BookOrdersTrigger  (f)    update       of      (g)     on books          (h)            WHEN     (i)      <(SELECT level FROM bookminlevel                                    WHERE bookminlevel.book_no = OLD.book_no)        AND      (j)       >=(SELECT level FROM bookminlevel                                       WHERE bookminlevel.book_no = OLD.book_mo)BEGIN        INSERT INTO (k)                 (SELECT book_no,limit_amount                       FROM booklimit as TMP                       WHERE TMP.book_no = OLD.book_no                       AND TMP.sale_type = OLD.sale_type);END;【问题3】   (4分)假设用户1和用户2同时购买同一书籍,对应事务的部分调度序列如表4-1所示(事务中未进行并发控制),其中T0时刻该书籍的库存数量all nums=500。请说明T4时刻,用户2事务读取到的all nums数值是多少?请说明T8时刻,all nums数据是否出现不一致性问题?如出现,请说明属于哪一种数据不一致性。

选项

答案

解析 【问题1】
a: sum
b:bno
c:10000
d:1
e:commit
【问题2】
f: after
g: all_nums
h: for each row
i: NEW.all_nums
j: OLD.all_nums
k: bookorders
【问题3】
说明T4时刻,用户2事务读取到的all_nums数值是498。

在T8时刻,all_nums数据会出现不一致性的问题,由于用户2事务读到了用户1修改过的all_nums,然后在T7时刻用户1事务回滚了之前对all_nums的修改,把all_nums恢复到了500。最终用户2事务读到的数据是498,读到的是脏数据。所以是属于读脏数据的不一致。
转载请注明原文地址:https://tihaiku.com/congyezige/2420051.html

最新回复(0)