数据库设计,两张表,表1和表2,表1的外键是表2的主键,表2的外键是表1的主键,这个设计有错吗?错在哪里?这样也可以表示多对多的关系吗?

解决方案 »

  1.   

    A(id pk, colb (ref b), col3)
    B(id pk, cola (ref a), col3)A(1, 1, 1), (2, 1, 1), (3, 1, 1)
    B(1, 2, 1), (2, 2, 1), (3, 2, 1)A的第二条记录对应有三条B的记录
    B的第1条记录对应A的三条记录
      

  2.   

    错是不错但是问题是会造成数据的冗余 会抽出很多相同的数据
    每次都要用distinct 不建议这样设计
      

  3.   

    对于这样的数据库设计,不仅有数据冗余,还易出现NULL值。应该是不满足关系数据库设计范式要求的。
    比如
    A(id pk, colb (ref b), col3)
    B(id pk, cola (ref a), col3)
    如果要对A插入数据,则必须要B中有相应的数据项,否则A.colb只能是NULL
    一般来说表示多对多的关系要用三张表
    A(id pk, col2)
    B(id pk, col2)
    C(id pk_A, id pk_B)
    具体的建议去看下关系数据库设计的基本范式
      

  4.   


    如果要对A插入数据,则必须要B中有相应的数据项,否则A.colb只能是NULL
    这是个问题,但不是多对多的问题,任何一个有外键的表都有这个问题。
    一般来说表示多对多的关系要用三张表
    我不要一般说来,是就是不是就不是,如果是出现数据冗余,请用有意义的数据清晰的表述出来。
      

  5.   

    倒,还没有见过这样设计的,2表的键互为主外键..这样还要主外键做什么....
    你先把ER图画出来...ER图都画好了,就容易设计表间关系了
      

  6.   

    这个怎么操作插入和删除,用null倒一下?