一个实验室管理系统,假设有三个表:实验室,实验分室,实验教师。
实验室表名:Lab,数据列:实验室编号(ID),实验室名称(Name)。
实验教师表名:Teccher,数据列:教师编号(ID),教师姓名(Name)。请大家看看,在设计数据列名时,是否需要把数据列的含义写完整,还是可以把表名的内容省略掉呢。
如:
实验室编号是用:ID,还是用:LabID。
实验室名称是用:Name,还是用:LabName。
教师姓名是用:Name,还是用:TeacherName。

解决方案 »

  1.   

    都可以,但是写全名称看上去会好些,尤其对于容易在多数表里出现的相同的字段名就如 id name code实验室编号是用:ID,还是用:LabID。
    实验室名称是用:Name,还是用:LabName。
    教师姓名是用:Name,还是用:TeacherName。
      

  2.   

    表名和字段名设计的一个基本原则:顾名思义,即一看就明白表示的是什么。一个字段名就是一个概念,最好让这个概念在整体系统是唯一的。
    比如TeacherName表示老师的名字,LabName表示实验室的名字。
    如果都用Name的话,光看到这个Name,还要参考上下文才知道指的是什么的名字,在写代码时增加思考的时间,也更容易出错。
      

  3.   

    习惯用前者,这样二次开发和维护方便,并且建议每个表名前加上“t_”,每个字段名前加上"F"或"C"
      

  4.   

    不建议NAME,L上说的都很有道理。
    需要错开关键字、保留字。
      

  5.   

    呃以前看过一个设计表规范,建议不要加前缀,原因是
    如果一个表是Teacher,那么这个表里的Name就是Teacher Name,再加Teacher显得多余。
    至于楼上说的参考上下文才知道是什么Name,我想写代码的时候,你自己应该清楚自己在写什么,问题不是很大。比如说ID,大家应该都不会写成TeacherID,StudentID,而是ID,我想Name其实也同样如此。当然了,原则是原则,如果你遵循需要加前缀,这本身也没什么错。只不过如果加的话,应该都加,而不是部分加,部分不加。个人感觉跟写代码规范差不多吧,用pascal还是camel,是个喜好问题。
      

  6.   

    带上表名吧。
    coding时自己别人也都明白些。这对程序运行没什么影响吧
      

  7.   


    恰恰相反。我都是宁可写成TeacherID、StudentID,而不是ID。比如下面几段代码,功能是根据指定课程ID查询该课程的任课老师和选课的学生。--完整字段名
    SELECT
    c.CourseID, c.CourseName, t.TeacherName,
    s.StudentID, s.StudentName
    FROM Course c
    INNER JOIN Teacher t
    ON c.TeacherID = t.TeacherID
    INNER JOIN ChooseCourse cc
    ON c.CourseID = cc.CourseID
    INNER JOIN Student s
    ON cc.StudentID = s.StudentID
    WHERE c.CourseID = @CourseID--简单字段名
    --使用表别名
    SELECT
    CourseID = c.ID, CourseName = c.Name, TeacherName = t.Name,
    StudentID = s.ID, StudentName = s.Name
    FROM Course c
    INNER JOIN Teacher t
    ON c.TeacherID = t.ID
    INNER JOIN ChooseCourse cc
    ON c.ID = cc.CourseID
    INNER JOIN Student s
    ON cc.StudentID = s.ID
    WHERE c.ID = @CourseID
    --不使用表别名
    SELECT
    CourseID = Course.ID, CourseName = Course.Name, TeacherName = Teacher.Name,
    StudentID = Student.ID, StudentName = Student.Name
    FROM Course
    INNER JOIN Teacher
    ON Course.TeacherID = Teacher.ID
    INNER JOIN ChooseCourse
    ON Course.ID = ChooseCourse.CourseID
    INNER JOIN Student
    ON ChooseCourse.StudentID = Student.ID
    WHERE Course.ID = @CourseID
    我一向都是使用第一段代码,即完整字段名。我们来看如果使用简单字段名的情况:
    1. 使用表别名:你的代码将充满大量的ID、Name,你要区分每一个ID和Name指的是什么的ID和什么的Name,以此来指定正确的表别名;还要区分何时带前辍(外键字段)何时不带前辍(主表字段)。假如某个表别名写成了另一个表的别名,则数据库引擎不会报任何错,它只是乖乖地返回不是你所想要的结果。逻辑错误比语法错误更讨厌。
    2. 不使用表别名:你的代码将会变成一个数“.”在什么位置的游戏,即什么时候表名与字段名中间要加“.”什么时候不用加。而且这样的代码丝毫没有简略性可言。它相比于第一种代码的优势何在呢?
      

  8.   

    一个字段名就是一个概念,最好让这个概念在整体系统是唯一的。比如这段代码:SELECT
        c.CourseID, c.CourseName, t.TeacherName,
        s.StudentID, s.StudentName
    FROM Course c
    INNER JOIN Teacher t
    ON c.TeacherID = t.TeacherID
    INNER JOIN ChooseCourse cc
    ON c.CourseID = cc.CourseID
    INNER JOIN Student s
    ON cc.StudentID = s.StudentID
    WHERE c.CourseID = @CourseID表示同一个概念的字段,在主表和参照表(通过外键引用主表的表)中是同样的名字。这样,程序员就明白让相同名字的字段去JOIN永远不会错(或许结果不符合查询要求,但至少是有意义的;而教师的ID与课程的ID去JOIN则是无意义的),而不是在JOIN的时候还要考虑这个ID应该从哪个表中来。类似,当程序员看到一些数据时:TeacherID  ID
    ---------  ------
    T000001    000001
    T000002    000002
    T000003    000003左边的数据,一看便知是教师的编号;而右边的数据,如果没有相关上下文,便是一组无意义的编号。
    更多建议,参考《SQL编程风格》一书。
      

  9.   

    个人习惯除了主键ID 还有需要关联的外键起冲突的列名  会带下表名
    其他的就不带了
    如同 OO设计一个对象 人的时候 定义属性 人手 人脚
    本来在查询中使用中都已经很明确了
      

  10.   

    感谢 feilniu ,写得很详细,有理有据。帮了很大忙。
    感谢跟帖回复的各位大大。
    学到了很多。
    散分!!
    世界杯快乐!!