请问一主细表关系问题

SZHHP 2003-11-21 03:16:01
一主表和一细表,一对多关系,要求主表的每一条记录在细表中至少有一条记录对应。
也就是主表记录不能孤立存在、在细表中不能没有其子记录,
这种关系如何定义?
谢谢
...全文
91 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-11-21
  • 打赏
  • 举报
回复
CREATE TRIGGER 名3 ON 细表
FOR delete
AS
delete 主表 where 编号 in (select 编号 from deleted where 编号 not in (select 编号 from 细表 ))
go
pengdali 2003-11-21
  • 打赏
  • 举报
回复
CREATE TRIGGER 名3 ON 细表
FOR delete
AS
delete 主表 where 编号 in (select 编号 from deleted)
and not exists (select 1 from 细表 where 编号 in (select 编号 from deleted))
SZHHP 2003-11-21
  • 打赏
  • 举报
回复
大家注意:“主表记录不能孤立存在”
用外键还是会让主表存在孤记录(细表没有相应子记录)的。
txlicenhe 2003-11-21
  • 打赏
  • 举报
回复
一主表和一细表,一对多关系,要求主表的每一条记录在细表中至少有一条记录对应。
也就是主表记录不能孤立存在、在细表中不能没有其子记录,
这种关系如何定义?
(
这种用外键和关联都没法实现,只能用触发器来检测
1: 在主表新增或修改主键时检测子表中是否有记录
2: 在子表中修改或删除时检测主表中的记录是否合法
)

hhmmss 2003-11-21
  • 打赏
  • 举报
回复
zjcxc(邹建)
pengdali(大力 V3.0)
牛人,小弟狂学!
pengdali 2003-11-21
  • 打赏
  • 举报
回复
企业管理器--右键表--设计表--任意字段处按右键--关系--新建--设置与其他表的关联(即那些表的字段与本表的字段有关系,要被自动更新)--设置好后,选中"对 INSERT 和 UPDATE 强制关系"--并同时选中"级联更新相关的字段",如果要级联删除,再选中"级联删除相关的记录"--最后确定就可以了
zjcxc 元老 2003-11-21
  • 打赏
  • 举报
回复
这样建好后.主表到子表的关系会自动维护.关联字段为id.

再写一个触发器,来维护从表与主表的关系.

create trigger t_delete on 从表
after delete
as
delete from 主键 where id not in(select id from 从表)
go
zjcxc 元老 2003-11-21
  • 打赏
  • 举报
回复
--类似这样建表
create table 主表(id varchar(40) not null constraint PK_主表 primary key
,aa varchar(10)
)

create table 从表(id varchar(40) not null
,indexid varchar(40) not null
,value varchar(500)
)
alter table 从表 add constraint PK_从表 PRIMARY KEY CLUSTERED (id,indexid)

--添加级联更新
ALTER TABLE dbo.从表 ADD CONSTRAINT
FK_从表_主表 FOREIGN KEY
(
id
) REFERENCES dbo.主表
(
id
) ON UPDATE CASCADE
ON DELETE CASCADE
friendliu 2003-11-21
  • 打赏
  • 举报
回复
FOREIGN KEY 约束
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。



FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。

friendliu 2003-11-21
  • 打赏
  • 举报
回复
在主表和细表中定义关键字
然后建立两者之间的约束关系就可以了。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧