例一:银行数据库
对银行数据库模式:
- 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(营业点编号)。
二、 使用关系代数生成如下所须的业务数据。
注意,投影运算后,其结果里面如果出现一模一样的行,重复的行会在输出结果中消除。
- 求出固定资产大于10000000的营业点的名称和所在城市。
Π b_name and city ( σ assets >10000000 (branch) ) - 可能存在有这样的城市:有营业点,但是还没有客户。请求出有哪些城市是这种情况。
Π city (branch) - Π city (customer) - 请列出在2019-09-27这天,在异地有交易记录的客户的姓名,账号。即客户所在的城市与交易发生的营业点所在的城市不相同。
Π c_name and account_no ( σ t_date=2019/09/27 and b_city != c_city ( transaction ⋈ customer ⋈ branch ) ) - 请求出在从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) ) - 对于在长沙的营业点,请列出在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 )) - 对于在长沙的营业点,请列出在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”}
业务规则约束
总统套房的房价应高于其他所有类型房间的房价;
同一客人最多同时预定三间房间。
二、 使用关系代数生成所须的业务数据:
- 对价格大于1500的房间,列出它所属的旅馆名称及其所在的城市。
Π name and city ( σ price>1500 ( Room ) ⋈ Hotel ) - 某个客户现在想在位于长沙的宾馆,预订一间房,定期为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) )