有三张表,
表A结构如下(menucode是主键)
  menucode    menuname   ......表B结构如下(rolecode是主键)
  rolecode    rolename   .......表C是中间表,我倾向于如下设计(组合键)
  menucode    rolecode而同事设计的表C的结构如下
  ID(序列主键)  menudode   rolecode请问表C那种设计更合理些,好,好在哪里?不好的又哪里不好呢?!很纠结,个人感觉中间表C加个散列主键没有任何意义,可说服不了同事,还是我理解问题,请高手指点解惑,多谢!

解决方案 »

  1.   


    --
    --组合键很有必要,
    --比如某大学数据库中有三张表:
    --student:stu_id(pk),stu_name,stu_addr,...
    --course:c_id(pk),c_name,c_no,c_description,...
    --achievement:stu_id,c_id,grade,...pk(stu_id,c_id),...
    --achievement表中使用了联合主键,
    --我们都知道,检索海量信息,如果不根据主键,唯一键,索引键来检索的话,你的查询速度将会非常慢。--根据学生id号查询成绩,如果成绩表中没有将stu_id设为主键,那么查询速度会慢一些:
    --我们都知道一般的表都是堆表,堆表中的数据是任意放置的,没有规律,
    --数据块中那里有空间,新添加的数据就放在那里,查询这样杂乱无章的数据,不慢才怪。--当你为表添加主键,oracle就会为这个主键建立索引,为你将来检索数据提高速度:
    SQL> create table test_pri(a number(1), b number(1));
    --1.创建主键,则自动创建同名唯一索引
    --1.1创建主键,主键约束和唯一索引同时创建
    SQL> alter table test_pri add constraint pk_test_pri_a primary key(a);
    SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
      2  from user_constraints where table_name = 'TEST_PRI';
     
    CONSTRAINT_NAME   TABLE_NAME   INDEX_NAME   
    ----------------- ------------ -------------
    PK_TEST_PRI_A     TEST_PRI     PK_TEST_PRI_A
     
    SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
      2  from user_indexes where table_name = 'TEST_PRI';
     
    INDEX_NAME       INDEX_TYPE   TABLE_NAME   UNIQUENES
    ---------------- ------------ ------------ ---------
    PK_TEST_PRI_A    NORMAL       TEST_PRI     UNIQUE