主键表(单据主体: 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 继续存在, )

解决方案 »

  1.   

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

  2.   

    同上
    外健关系是为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值在被引用表中对应的被引用列中都存在。FOREIGN KEY 约束只能引用被引用表中为 PRIMARY KEY 或 UNIQUE 约束的列或被引用表中在 UNIQUE INDEX 内引用的列。---
    楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)
    ...
    应用程序控制时,在点保存、确定时再分别按顺序插入表..
      

  3.   

    首先
    谢谢楼上几位, 由于分少只有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: 
      楼主说的情况可用触发器\存储过程封装...(判断插入数据库的顺序)  
      ----可否详细说说
      应用程序控制时,在点保存、确定时再分别按顺序插入表.. 
      ---- 通过应用程序的方法是有, 先暂时存到外部文件, 但比较麻烦,希望通过数据库方面解决 或者有更好的办法