--数据库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

解决方案 »

  1.   

    1.添加约束:1939年以前的电影不会是彩色的。
    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)
      

  2.   

    更正zjcxc
    --1.添加约束:1939年以前的电影不会是彩色的。
    alter table Movie 
    add check(year>1939 or incolor=0) --1939年以前的电影不会是彩色的
      

  3.   

    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))应该是<
    and m.year<year(s.birthday))
    then 1 else 0 end)--1表示出现过,0表示未出现
    end
    go