我以为B表设计两个对于A表的外键,很为不妥;不若在B表中只留一产品编号,而B表此项产品的父项产品编号可从A表中获得,A表中可加一字段:父产品编号,以表示产品之间的关系。

解决方案 »

  1.   

    我做一个管理系统,需要设计两个表:A:[产品编码目录表]和B:[产品组成表]其中:
    A表中有[产品编号],[产品名称],[产品规格],[产品单位],[产品类别],[产品单价]六字段
    B表中有[父项产品编号],[子项产品编号],[组成数量]三个字段.我无法像[youngqp]朋友所说的那样,在B表中只留[子项产品编号],而把[父项产品编号]放入A表中,本来这两个表表达的意义就是不一样的;再者,B表中的某个[子项产品编号]通过怎样的方式到A表中找它的父亲? 最终B表中还得放入[父项产品编号]这个字段,用于说明该子项产品,它的父亲就是这个[父项产品编号].不知各位高手还有什么好的办法来设计这两张表? 这两张表的字段应该如何安排?
      

  2.   

    一般我不设计外键,因为备份,存取都有麻烦! 要是我,我就这样设计:
    A表:--主键 产品编号 PK 唯一
    [产品编号] 
    电脑
    主板
    内存条
    显卡
    显示器B表: pk 产品编号 唯一
    [产品编号] [父项产品编号]
    主板     电脑  
    显示器   电脑  
    显卡     主板
    内存条   主板然后前台程序控制B表的[产品编号] [父项产品编号]来源于A表
      

  3.   

    B中对A.[产品编号]的foreign key引用不能同时为on delete cascade或者同时为on delete cascade
    ,只能一个为cascade,另一个为no action,如:
    alter table B add constraint fk_1 foreign key([父项产品编号]) references A([产品编号]) on update cascade on delete cascadealter table B add constraint fk_2 foreign key([产品编号]) references A([产品编号]) on update no action on delete no action
      

  4.   

    不用产品编号做PK么,另外定一个ID字段作为PK就搞定了
      

  5.   

    这个结构就是标准的 物料 和 BOM 的结构
      

  6.   

    on delete cascade
    on delete cascade
    是什么意思?