真不好意思,各位,图有点不好看,开头的第一个图是误传的,下面有相同的图。
那个ER图看起来很乱,但是细看能看出来,上个小图吧:CSDN没有办法编辑原帖子真不好。。

解决方案 »

  1.   

    大概看了下 7个表基本够用 但是不建议使用名称作为主键可以考虑加个ID ,其他表关联的时候也加上这个表的ID  这样的话在程序中好处理些
      

  2.   

    游客表中为什么会有那个景点编号,是因为你看下我的ER图,有个一对多的关系,所以要并入到其中,这是为了查询哪些景点游客旅游的频率大。
    我是用城市表中的城市名作为主键的,ID的话感觉没必要。为什么要用ID作为主键好点呢?
    景区确实包括很多景点,所以是一对多的关系,把景区的主键ScenID并入到了景点之中。
      

  3.   

    /*
    1、Tourist表:不要加景点编号,原因是游客和景点是多对多的关系,需要建立中间表;
    2、City表:不要以名称作为主键,加个ID来标识下;
    3、Scenery表:城市名改为城市ID;
    4、Place表:同样不要以名称做主键,加ID;
    5、Hotel表:加ID,做主键;
    6、Near表:最好加个标识ID,宾馆名称改为宾馆ID。
    */
      

  4.   


    PS:“价格”类字段为啥都用varchar?是不是用数字类或money企不是更好?
      

  5.   

    哦。我想了想看了下面各位前辈的回复,确实是,游客和景区,游客和城市是多对多的关系,需要建立中间表。
    景点和名胜古迹不是一回事。比如说XX景区有个喷泉。这里的XX就是景区,喷泉就是属于这个景区的名胜古迹。
    谢谢前辈了。
      

  6.   

    明白了不少,游客和城市,游客和景区之间应该是多对多的关系,我想知道的是,为什么用ID作主键?只是为了标识唯一性吗?应该为int类型还是varchar还是char呢?
      

  7.   

    为什么用ID作主键?唯一性是一个原因,一般来说,名称是保证不了不修改的,长期来说,一般不用名称作为唯一标识。
    另一个原因是,主键往往用于与其它数据关联,这时用个较短的ID可以提高性能,如果用名称,长短不一定是存在隐患的。所以选择主键类型的时候尽量短而唯一,能int当然最好
      

  8.   

    哦 这段话我不太明白,先考虑下那个ID吧,那个ID,我找了下资料,有用int的,并且是自动增长的,有用nchar的,我想我这个地方的话,应该是int,nchar的话一般是用在公司编号上面,位数保持不变。
    那么问题就是:用int的话,比如说城市表有个CityID,设置为int类型,那么它是不是要设置为自动增长呢?如果要设置的话,触发器不太会写。不设置的话,有没有什么影响?
      

  9.   

    关系大概清楚了,就差这个ID的int类型是不是自动生成了。
      

  10.   

    关系大概清楚了,就差这个ID的int类型是不是自动生成了
    一般是设成自动增长,在列属性里的标识符规范中可以设置增量数,不然的话在输入数据时需要你自己手动输入ID是多少
      

  11.   

    哦。用SQL语句的话呢?是不是如果我要对它进行操作的话,就不要设置为自动增长。相反,如果不对它操作,就设置为自动增长?
      

  12.   

    谢谢,我知道了。alter   table   tb   add   id   int   identity(1,1) 。