数据库问题内部编号作为员工基本信
浅谈一点:
主键:有唯一表示一个实体标识,可以是物理上的唯一标识(比如人员基本信息可以用:身份证件号码来作为唯一标识),另一种是逻辑上的唯一标识(比如流水号,为什么要它那?)。其有两个约束:1:必须唯一,2:不允许为空。 在数据查询中,它不仅仅起着唯一标识那么简单的意义.它也其着索引的意义,当数据库中某一张表的主键或唯一约束创建的时候,此时系统自动为其创建唯一性索引.试想一想,如果一个一张表的各元组没有唯一标识,那么如何区分它们那?就像班级上每个同学都有一个学号,老师要找人就好找多了,也适合网络统计,计算机一样,当有一个唯一标识后,它对某事物的索引速度迅速增强,其实数据库首要要把搜索的数...全部
浅谈一点:
主键:有唯一表示一个实体标识,可以是物理上的唯一标识(比如人员基本信息可以用:身份证件号码来作为唯一标识),另一种是逻辑上的唯一标识(比如流水号,为什么要它那?)。其有两个约束:1:必须唯一,2:不允许为空。
在数据查询中,它不仅仅起着唯一标识那么简单的意义.它也其着索引的意义,当数据库中某一张表的主键或唯一约束创建的时候,此时系统自动为其创建唯一性索引.试想一想,如果一个一张表的各元组没有唯一标识,那么如何区分它们那?就像班级上每个同学都有一个学号,老师要找人就好找多了,也适合网络统计,计算机一样,当有一个唯一标识后,它对某事物的索引速度迅速增强,其实数据库首要要把搜索的数据先复制到内存,然后排序,按照你的SQL代码以及对应表的数据结构进行算法设计和优化,然后执行算法,返回运算结果(内核是用C一类的语言编写的).那么存在主键为什么还要唯一性约束那?那是因为有可能一个实体当中可能存在多个属性都可以作为主键,比如:在学生管理软件里面,学生的学号和身份证件号码都可以作为主键(理论书籍中称为:侯选键),但如果在学校,我们当然选择学号作为主键,因为用它作为检索的情况太频繁了.而如果系统内部对身份证的安全级别要求也很高,那么就可以把身份证号码作为唯一约束来处理.不过这样做,在实际开发过程当中增加了很多程序员的水平,需要考虑很多问题,比如:数据库中最为困头的问题就是空值处理,唯一性约束是可以为空的,而又不允许有两个是空的.为什么要有逻辑上的主键那(所谓逻辑上的,是指次属性是人工添加的,而不是该实体的基本属性),一个考虑到的是可能次实体没有任何属性可以标识自己的唯一性,或者即使可以标识这些属性但是它不能凸显我在系统内部的业务需求,必须某些层次结构,都需要人工去建立它的编码规则,这需要一点点的数据结构基础.这些就是人工去给它作为编码,而唯一标识也可以为了其它某些实体可以依赖于此实体的象征,就像在生活中,杂们家的"桌子"一看就知道,杂门家就是依靠这张桌子吃饭,而不是依靠别人家的桌子吃饭.
相信这么一说,外键是什么意义大概也知道了吧,就是依赖与某一实体的主键而存在的实体,比如:如果在校园建立管理系统,首先要有学校的存在,然后在是学院,学院都必须依赖于学校而存在,而班级必须依赖于学院而存在,也就是说,比如我说,大一三班,谁也不知道,我说"某学校某学院大一三班"大家都可以去找到了,此时候,班级成为层级内部的唯一标识,上下呈现父子关系,用建模来说就可以算是"层次建模".其最多可以体现1:M的关系模式,如果要体现M:N的关系,适合使用"关系建模".就是建立关系表的概念.
而为什么有些键位既要作为主键也要作为外键那?这种情况一般是多个外键存在于一个表中,作为一个关系,然后需要认为一个关系是唯一存在的,然后把此表中的这几个属性共同生成一个主键(记住:此主键有点不一样,其存在是多个键但只有一个主键,也就是说这些属性是可以重复的,但其组合是不可以重复的).譬如:在学生选课的一个系统中,一个学生可以选择多门课程,同一门课程也可以被多个人选择,这是多对多的关系,一般需要建立关系表(中间表),那么此表就至少需要两个属性:学生唯一标识(学号),课程唯一标识(课程号)(至于需要其他的什么东西,必须学生成绩是依赖于次关系而存在的等等就是实际应用中的问题了),那么学号必须来源于学生基本属性的唯一标识中才可以体现关系的存在所以要把它作为外键,而课程号必须来源于课程基本信息表中,所以也必须设计为外键才可以存在,而同一学生可以选择多个课程,就那么学生的属性允许在这里重复,相应课程也是如此,但是,同一个学生不可以对同一门课程选择两次(因为如果那样的话就乱套了).所以我又必须把这两个键的组合作为主键来处理,因为很多学生经常要查自己的课表,此可以作为他们的索引依据.
至于主外键级连的问题,我个人认为是有场合和使用性的,因为有些没有在主外键级连太多是会出问题的,某些数据一旦物理删除就无法找回来,比如公司人事管理系统中,某部门被删除,而人员信息成为无部门人员,我要为这些人员重新分配部门,但如果建立级连的话就会导致次部门的人员信息被遭到删除.
对于表的建立需要经验了,设计者将直接导致系统的运行和程序员的工作难度.对于不同档次的系统可以对系统的内部设计使用不同的方式,而对于不同应用也是这样了,不如上述对于统计类的数据最好使用级连删除,因为如果不级连删除的话会导致一些统计数据出现错误,但最好删除同时备份到指定表中去(以做后用).
上述浅谈,请摸见效.。
收起