用户ID,用户名还是真实姓名设计同学录的数据库,考虑到在系统里(网页里)留言板,论坛等都用真实姓名显示(而不是用户名),这样显示比较亲切,也比较清楚。用户表(Users)如下
UserId,Username,RealName,....留言表(Topic) 
UserId,Title,Content,....是否应该在Topic表里增加RealName字段??(UserID还是存在的)
如果包括RealName字段,违反了范式,造成了冗余,每次用户更改用户姓名时都需要修改留言表,但这样做的好处是不用每次显示都执行多表连接,因为数据可能会很多,同时使用Hibernate也更加方便。注:类似留言表这样的表格很多,显示时都用真实姓名。

解决方案 »

  1.   

    select A.realName,B.Title,B.Content from Users A inner join Topic B on A.userid=B.userid
    這樣就可以了吧?
      

  2.   

    每次都join 对效率会不会有很大影响?
      

  3.   

    从留言表中查询数据,左关联用户表(是注册的用户才可留言,匿名的话则取不到用户信息)
    1楼的如果是匿名的话就查不到留言了
    select username,realname,title,content 
    from topic
    left join users on users.userid = topic.userid如果将realname冗余到topic表中,一个是容量会增大,再一个是用户修改时要同步topic表
    如果不同步的话查询就要关联,速度会慢点.楼主根据实际情况定夺吧
      

  4.   

    @gahade如果将realname冗余到topic表中,一个是容量会增大,再一个是用户修改时要同步topic表
    如果不同步的话查询就要关联,速度会慢点.是的,我在这两者之间举棋不定
      

  5.   

    select a.realname ,
           b.*
    from  Users a
    inner join  topic b
    on a.userid = b.userid
    ==
    我想用连接做 , 遵循数据库的设计规范
      

  6.   

    也许数据量大的话 , 用户查询频繁的话
    你就加个realname 字段
    如果不是这样 , 建议用连接
      

  7.   

    忘记说一点,就是要用Hibernate 做ORM,这样可能加个realname 字段更方便点