CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

关于子类的引用,向前辈取经了!

楼主wolve(祝你生活愉快)2003-08-04 16:50:50 在 MS-SQL Server / 基础类 提问

有a,b,c来个实体,为了实际c的一个字段引用b或者是引用a的主键,在b与c上抽象了一个超类d,就像在teacher与student上抽象出超类person一样,大家觉得这种方法行不行,或者有没有什么好办法。  
  如果行,那d的一列要不在c中,要不在b中,这样的设计有没有问题?  
  b与c基本没有共同的地方,而且b支持修改,c不支持,所以不好抽象在一个表中。  
  客户的需求很变态,实在没办法,大家帮忙啊。 问题点数:100、回复次数:5Top

1 楼wolve(祝你生活愉快)回复于 2003-08-04 17:16:22 得分 0

upTop

2 楼wolve(祝你生活愉快)回复于 2003-08-04 17:54:38 得分 0

救命啊Top

3 楼txlicenhe(马可)回复于 2003-08-04 18:08:01 得分 10

“客户的需求很变态”.       同情Top

4 楼pengdali()回复于 2003-08-04 19:57:17 得分 90

1、这种需求是常见的  
   
  2、不能通过数据库定义来做这个关系,只能靠触发器  
   
  3、你也可以定义个个视图(你的超类person),通过触发器来约束这三个表间的关系如:  
   
  实现:  
  create   view   视图   as   select   id   from   a   union   all   select   id   from   b  
  go  
  create   trigger   t_c   on   c   for   insert   as   if   exists(select   1   from   inserted   where   id   not   in   (select   id   from   视图))   rollback   tran  
  go  
  create   trigger   t_a   on   a   for   delete,update   as   if   exists(select   1   from   deleted   where   id   in   (select   id   from   c))   rollback   tran  
  go  
  create   trigger   t_b   on   b   for   delete,update   as   if   exists(select   1   from   deleted   where   id   in   (select   id   from   c))   rollback   tran  
  goTop

5 楼wolve(祝你生活愉快)回复于 2003-08-05 10:01:43 得分 0

谢谢pengdali(大力   V2.0)!  
  为了提高可移植性,trigger与view,storeprocedure都不支持.  
  而且好像抽象超类这种方法是很常见的,不知大家是怎么处理的。例子,客户不管是学生还是老师,只管通过一个姓名来查询person的个人资料。这时又应该怎么处理呢Top

相关问题

  • 散分向前辈取经。。。
  • 向各位前辈们取经
  • 如何在基类中引用子类中的DataGrid,在线等,100分叩谢
  • 子类、父类
  • 请教各位前辈:我是初学者,如何引用「Microsoft DAO 3.6 Object Library」 ?
  • 关于子类化
  • 子类化的问题(vc++)
  • 子类化==超类化?
  • 派生子类的问题:
  • 关于Listbox的子类化

关键词

  • 视图
  • 引用
  • 抽象
  • trigger t
  • 超类
  • rollback
  • person
  • deleted
  • 没有
  • where

得分解答快速导航

  • 帖主:wolve
  • txlicenhe
  • pengdali

相关链接

  • SQL Server类图书

广告也精彩

反馈

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