导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

有这样一个关系问题,大家怎么处理

tengxiang05 2007-12-22 09:20:34
主键表(单据主体: bill)
id, code, date.......

处键表(单据明细: items)
id, bill_id, amount......


关系: (FK_bill_items) bill.id -> items.bill_id

这样之后: items.bill_id 必须在 bill 是存在的, 构成数据的完整
----
然而现在前端应用程有种特殊的需求: 预知 bill_id, 要先存 items, 再存 bill
这样必须 据FK_bill_items 去掉,这样数据设计不太好,
解决的方法之一: 就是通过前端的应用程先写外部的存储文件,这样前端变复杂,

--
除此之外, 有什么两全的办法, (想FK_bill_items 继续存在, )
...全文
50 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
w2jc 2007-12-22
预知 bill_id, 要先存 items, 再存 bill
---------------------------------------
看不出有什么特别难的,
先在bill表中插入记录,获得一个有效的bill_id。
既然 bill_id已经存在了,就可以先保存item的具体内容,
等bill的内容有了,再根据bill_id去更新bill表就可以。

要不就是我没有完全理解LZ的意思...
回复
tengxiang05 2007-12-22
没人就算了
回复
yinqi025 2007-12-22
外键约束还让它存在好了,不强制约束应该就可以的呀
回复
tengxiang05 2007-12-22
up
回复
tengxiang05 2007-12-22
首先
谢谢楼上几位, 由于分少只有50分, 等明天涨几分, 把全部分都加上去
------

预知 bill_id, 要先存 items, 再存 bill
---------------------------------------
看不出有什么特别难的,
先在bill表中插入记录,获得一个有效的bill_id。
既然 bill_id已经存在了,就可以先保存item的具体内容,
等bill的内容有了,再根据bill_id去更新bill表就可以。

要不就是我没有完全理解LZ的意思...
-------------
to w2jc: 可能我没表达清楚, 是这样的, bill_id 是预先知道, 由于别的原因,
要先处理items 表, 然后再处理 bill 表,
---
to dawugui : 不能外键, 当然可以, 但是我希望是外键, 保证数据的完整性
--
to roy_88:
楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)
----可否详细说说
应用程序控制时,在点保存、确定时再分别按顺序插入表..
---- 通过应用程序的方法是有, 先暂时存到外部文件, 但比较麻烦,希望通过数据库方面解决

或者有更好的办法
回复
中国风 2007-12-22
同上
外健关系是为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值在被引用表中对应的被引用列中都存在。FOREIGN KEY 约束只能引用被引用表中为 PRIMARY KEY 或 UNIQUE 约束的列或被引用表中在 UNIQUE INDEX 内引用的列。

---
楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)
...
应用程序控制时,在点保存、确定时再分别按顺序插入表..
回复
OracleRoob 2007-12-22
不同意楼上的说法,合理的使用外键,以及外键中的级联更新、级联删除,还是很有必要的。
回复
dawugui 2007-12-22
所以能不用所谓的外键就不要用.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告