主键表(单据主体: 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 继续存在, )
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 继续存在, )
---------------------------------------
看不出有什么特别难的,
先在bill表中插入记录,获得一个有效的bill_id。
既然 bill_id已经存在了,就可以先保存item的具体内容,
等bill的内容有了,再根据bill_id去更新bill表就可以。要不就是我没有完全理解LZ的意思...
外健关系是为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值在被引用表中对应的被引用列中都存在。FOREIGN KEY 约束只能引用被引用表中为 PRIMARY KEY 或 UNIQUE 约束的列或被引用表中在 UNIQUE INDEX 内引用的列。---
楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)
...
应用程序控制时,在点保存、确定时再分别按顺序插入表..
谢谢楼上几位, 由于分少只有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:
楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)
----可否详细说说
应用程序控制时,在点保存、确定时再分别按顺序插入表..
---- 通过应用程序的方法是有, 先暂时存到外部文件, 但比较麻烦,希望通过数据库方面解决 或者有更好的办法