关于表设计问题 ----- 外键

meilian01 2004-12-30 09:04:05
你们一般是用什么字段作外键的?
我们公司用自增量,但这样存在一个问题。

例如:

表 PartNo

PartNoID int IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL
PartNo varchar (20)

我们一直用PartNOID 作外键,这样经过导入导出,或者删除之后再增这个产品,在其它表中就找不到此产品编号。我认为,是不是应该拿PartNo作外键。
你们通常是怎么做的?

谢谢!!





...全文
170 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaandys 2004-12-30
  • 打赏
  • 举报
回复
我说过你不用触发器,你就得先 dbcc checkident,只有这样才能保证....

外键:是用在主从表关系上的从表的。

要用外键,可以在主表上把标识改成公式
meilian01 2004-12-30
  • 打赏
  • 举报
回复
楼上,我不想每个表都给它做一个触发器。

我想知道你们到底是那一个字段作为外键。

谢谢啦

chinaandys 2004-12-30
  • 打赏
  • 举报
回复
个人见议,仅作参考:

你用标识当然删除了以后并没有dbcc checkident,当然就找不到此产品编号

像你这样设计加一个标识,深不知你不何用,还不加用公式 as(max(id)+1)


如果非要用标识就要先用:
create trigger tr_partNo on partNo
for delete
as
select * from deleted
if @@rowcount>0
begin
declare @partNoID int
select @partNoID=max(partNoID) from partNO
//或用 select @partNoID=partNOID from deleted
dbcc checkident(PartNoID,reseed,@partNoID)
end
meilian01 2004-12-30
  • 打赏
  • 举报
回复
是的,我也这样认为。

但你们通常是怎么做的?
因为我所有的表都是这样做的。

还望赐教
铁歌 2004-12-30
  • 打赏
  • 举报
回复
外键是其连接表的主键,用PARTNOID肯定不合适的,

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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