CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

复杂的"约束"

楼主wwei07()2005-04-19 07:25:00 在 MS-SQL Server / 基础类 提问

数据库MovieStar包含5个关系,它们是:  
  电影信息Movie   (Movie_no   ,   title,   year,   length,   incolor(是否彩色),cert#(制片公司编号))  
  影星参加StarsIn   (Movie_no   ,   StarName(影星名))  
  影星信息MovieStar   (Star_Name,   address,   gender,   birthday)  
  制片公司行政执行长官MovieExec   (Exec_Name,   address,   cert#,   netWorth(净资产))  
  制片公司Studio(Studio_name,   address,   cert#)  
  用Transact-SQL     完成下列操作:  
   
  1.添加约束:1939年以前的电影不会是彩色的。  
  2.添加约束:影星不会出现在他们出身之前的电影里。  
   
   
  问题点数:50、回复次数:8Top

1 楼yesyesyes()回复于 2005-04-19 07:55:07 得分 0

用约束?  
  还是用触发器吧.Top

2 楼friendliu(无为)回复于 2005-04-19 08:02:09 得分 0

触发器容易实现  
   
   
  Top

3 楼zjcxc(邹建)回复于 2005-04-19 08:33:23 得分 30

--数据库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  
  go  
   
  alter   table   StarsIn    
  add   check(dbo.f_check(StarName)=0)  
  alter   table   MovieStar    
  add   check(dbo.f_check(StarName)=0)  
  go  
   
  drop   table   Movie,StarsIn,MovieStar  
  drop   function   f_check  
  Top

4 楼ricleon(寒浪)回复于 2005-04-19 08:44:42 得分 0

UPTop

5 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-04-19 08:54:02 得分 10

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)Top

6 楼ray680719(HAPPYWORLD)回复于 2005-04-19 09:00:04 得分 0

数据约束和查询两码事。Top

7 楼ray680719(HAPPYWORLD)回复于 2005-04-19 09:13:20 得分 0

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

8 楼xspf()回复于 2005-04-19 10:39:25 得分 10

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  
  Top

相关问题

  • 约束最复杂能到什么程度?
  • 如何在SCHEMA中定义一个没有顺序约束的复杂元素类型?
  • mysql约束。
  • check约束
  • 约束问题
  • 完整性约束
  • 约束表达式。
  • 讨论 几何约束求解(二维约束、三维约束)
  • 如何查看约束?
  • 定义表约束条件

关键词

  • check
  • 信息
  • starname
  • moviestar
  • starsin
  • movie
  • incolor
  • 影星
  • starnameand
  • 添加约束

得分解答快速导航

  • 帖主:wwei07
  • zjcxc
  • Hopewell_Go
  • xspf

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo