本帖最后由 I520C 于 2010-12-02 12:55:42 编辑

解决方案 »

  1.   

    “从概念模型转物理模型时,预算单的主键做了结算单的主键及外键,加上结算单本身的主键一起做了结算单的联合主键。” 啥意思?一个表只有一个主键,描述清楚。
    “并且各自的“合同_id”属性是跟各自表原来的主键_id走的” 又是啥意思?什么叫跟原来的_id走的?你前面作了假设主键,后面就用它描述,不然搞不懂哇啦哇啦
      

  2.   

    不违反二范式的情况下:
    如果,结算单的“合同_id”属性只由结算单本身的id确定
    那么,单独建立一张表示结算单_id,合同_id之间关系的表,就不违反了。范式只是让开发人员可以检测和纠正重复数据的一个数据库设计原则。
      

  3.   

    是这样的,从概念模型开始,有一张预算单表(主键:预算单_id,属性:合同_id,... ),预算单表的“合同_id”由主键:"预算单_id" 确定, 另一张结算单表(主键:结算单_id,属性:合同_id,...),结算单表的属性"合同_id”由主键:"结算单_id" 确定; 结算单表依赖预算单表,也是说先有预算单才会有结算单,而且是一对一的关系 。转物理模型后,结算单表变为(主键+外键:预算单_id,主键:结算单_id,属性:合同_id,...),而结算单表的属性"合同_id“只由主键:"结算单_id"确定,所以就违反的第二范式的部分函数依赖。
      

  4.   

    你本来主外键就是一对一的关系,pd给你生成的时候就给你在结算表中自动生成了预算单_id作为候选键,这并没错。问题是在确定了一对一的关系后,你还人为的在结算单表中自定义了主键,这就造成了两个"主键",也就是两个候选键,如果不想违反2F,那就去掉结算单_id,或人为修改。有时设计表不必严格遵守范式,现实中存在不少时间换空间或空间换时间的设计