--数据库MovieStar包含5个关系,它们是:
--电影信息
create table Movie(
Movie_no int,
title varchar(100),
year int,
length int,
incolor bit,
cert nvarchar(10))--影星参加
create table StarsIn (
Movie_no int,
StarName nvarchar(10))--影星信息
create table MovieStar (
StarName nvarchar(10),
address nvarchar(10),
gender char(1),
birthday datetime)
go--制片公司行政执行长官MovieExec (Exec_Name, address, cert#, netWorth(净资产))
--制片公司Studio(Studio_name, address, cert#)--1.添加约束:1939年以前的电影不会是彩色的。
alter table Movie
add check(year>1939 or incolor=1) --1939年以前的电影不会是彩色的
go--2.添加约束:影星不会出现在他们出身之前的电影里。
create function f_check(@StarName nvarchar(10))
returns bit
as
begin
return(case
when exists(
select * from Movie m,StarsIn si,MovieStar s
where s.StarName=@StarName
and si.StarName=@StarName
and m.Movie_no=si.Movie_no
and m.year>year(s.birthday))
then 1 else 0 end)
end
goalter table StarsIn
add check(dbo.f_check(StarName)=0)
alter table MovieStar
add check(dbo.f_check(StarName)=0)
godrop table Movie,StarsIn,MovieStar
drop function f_check
--电影信息
create table Movie(
Movie_no int,
title varchar(100),
year int,
length int,
incolor bit,
cert nvarchar(10))--影星参加
create table StarsIn (
Movie_no int,
StarName nvarchar(10))--影星信息
create table MovieStar (
StarName nvarchar(10),
address nvarchar(10),
gender char(1),
birthday datetime)
go--制片公司行政执行长官MovieExec (Exec_Name, address, cert#, netWorth(净资产))
--制片公司Studio(Studio_name, address, cert#)--1.添加约束:1939年以前的电影不会是彩色的。
alter table Movie
add check(year>1939 or incolor=1) --1939年以前的电影不会是彩色的
go--2.添加约束:影星不会出现在他们出身之前的电影里。
create function f_check(@StarName nvarchar(10))
returns bit
as
begin
return(case
when exists(
select * from Movie m,StarsIn si,MovieStar s
where s.StarName=@StarName
and si.StarName=@StarName
and m.Movie_no=si.Movie_no
and m.year>year(s.birthday))
then 1 else 0 end)
end
goalter table StarsIn
add check(dbo.f_check(StarName)=0)
alter table MovieStar
add check(dbo.f_check(StarName)=0)
godrop table Movie,StarsIn,MovieStar
drop function f_check
alter table Movie
add check(year>1939 or incolor='no')
2.影星不会出现在他们出身之前的电影里。--這里只是一個查詢。
select * from Movie m,StarsIn si,MovieStar ms
where ms.StarName=si.StarName
and m.Movie_no=si.Movie_no
and m.year>year(ms.birthday)
--1.添加约束:1939年以前的电影不会是彩色的。
alter table Movie
add check(year>1939 or incolor=0) --1939年以前的电影不会是彩色的
returns bit
as
begin
return(case
when exists(
select * from Movie m,StarsIn si,MovieStar s
where s.StarName=@StarName
and si.StarName=@StarName
and m.Movie_no=si.Movie_no
--and m.year>year(s.birthday))应该是<
and m.year<year(s.birthday))
then 1 else 0 end)--1表示出现过,0表示未出现
end
go