例一:银行数据库

对银行数据库模式:

  • branch (b_no,b_name, address, city, assets)
  • customer (account_no,c_name, street, city)
  • transaction (account_no, t_date,t_time, t_type, amount, b_no)

分别为营业点表,客户表,客户的交易记录表。t_type有deposit,withdraw两种类型。

一、 标识每个表的主键,有外键的,标识出来。

branch(营业点表)的主键为b_no(营业点编号),无外键;
customer(客户表)的主键为account_no(客户编号),无外键;
transaction (交易记录表)的主键为account_no(客户编号)、t_date与t_time(交易时间,同一客户可以在不同时间进行交易),外键为account_no(客户编号)、b_no(营业点编号)。

二、 使用关系代数生成如下所须的业务数据。

注意,投影运算后,其结果里面如果出现一模一样的行,重复的行会在输出结果中消除。

  1. 求出固定资产大于10000000的营业点的名称和所在城市。
    Π b_name and city ( σ assets >10000000 (branch) )
  2. 可能存在有这样的城市:有营业点,但是还没有客户。请求出有哪些城市是这种情况。
    Π city (branch) - Π city (customer)
  3. 请列出在2019-09-27这天,在异地有交易记录的客户的姓名,账号。即客户所在的城市与交易发生的营业点所在的城市不相同。
    Π c_name and account_no ( σ t_date=2019/09/27 and b_city != c_city ( transaction ⋈ customer ⋈ branch ) )
  4. 请求出在从2019-09-01至2019-09-27期间,没有交易记录的客户的姓名,账号,所在城市。
    Π c_name and account_no and city ( σ t_date=2019/09/01~2019/09/27( ( Π account_no (customer) - Π account_no ( transaction ⋈ customer) ) ⋈ customer) )
  5. 对于在长沙的营业点,请列出在2019-09-27这天的所有交易记录;
    Π acount_no and t_date and t_time and t_type and amount and b_no (σ city=”changsha” and t_date = 2019/09/27 ( transcation ⋈ branch ))
  6. 对于在长沙的营业点,请列出在2019-09-27这天在这里取了款的客户的姓名及其账号。
    Π c_name and account_no (σ t_date=2019/09/27 and b_city = “changsha” ( σt_type=withdraw ( transaction) ⋈ branch ⋈ customer ) )

例二:宾馆数据库

The following 4 tables form part of a database held in a relational DBMS.

  • Hotel (hotelNo, name, city)
  • Room (roomNo, hotelNo, type, price)
  • Booking (hotelNo, roomNo, guestNo, dateFrom, dateTo)
  • Guest (guestNo, name, city)

Types of room include single, double, advanced, president.

一、 标识出四个表的主键。对有外键的,标识出它的外键。写出房间类型字段的域约束。根据宾馆业务常识,写出两个业务规则约束。

四个表的主键与外键为:
	Hotel主键为hotelNo,无外键;
	Room主键为roomNo、hotelNo(不同宾馆可以有房间号相同的房间),无外键;
	Booking主键为hotelNo、roomNo(同一位客人可以预定同一宾馆的多间房)、dateFrom(同一位客人可以在不同时间预定同一宾馆的同一间房),外键为hotelNo(Hotel的主键)、guestNo(Guest的主键)、roomNo与hotelNo(Room的主键);
	Guest主键为guestNo,无外键。
	
房间类型字段的域约束:
	数据类型:字符串型
	取值范围:{“single”,”double”,”advanced”,”president”}

业务规则约束
	总统套房的房价应高于其他所有类型房间的房价;
	同一客人最多同时预定三间房间。

二、 使用关系代数生成所须的业务数据:

  1. 对价格大于1500的房间,列出它所属的旅馆名称及其所在的城市。
    Π name and city ( σ price>1500 ( Room ) ⋈ Hotel )
  2. 某个客户现在想在位于长沙的宾馆,预订一间房,定期为2019-09-27一天,请列出当前可预订的房间的宾馆名称,房间号,价格。
    Π name and roomNo and price ( σ city=”changsha” ( Room ⋈ Hotel) ) –Π name and roomNo and price( σ dateFrom<=2019/09/27 and dateTo>2019/09/27 ( Booking ⋈ Room ⋈ Hotel) )