精华内容
下载资源
问答
  • 数据库中的主键

    千次阅读 2013-11-16 11:13:20
    在数据库中能够唯一识别每一条记录一个字段或者多个字段组合,称之为主键(Primary Key)。主键主要作用将表中记录数据和其他表中数据进行关联。作为主键需要满足如下条件: 主键值所在字段不...

    在数据库表中能够唯一识别每一条记录的一个字段或者多个字段的组合,称之为主键(Primary Key)。主键的主要作用将表中记录的数据和其他表中的数据进行关联。作为主键的需要满足如下的条件:

    主键值所在的字段不能为null。

    主键值具有唯一性,不能重复。

    主键必须简洁,不要包含过多属性。

    表中的主键通过数据库DDL语句设置的,主键又可以分为自然主键(Natrual Key)和代理主键。

    3.1.1  自然主键

    在数据库表中把具有业务逻辑含义的字段作为主键,称为"自然主键(Natural Key)"。例如,如果有一个employee表,保存某个公司所有员工的基本信息,其中员工的身份证号具有唯一性,所以可以使用身份证号作为这个表的主键,还可以通过两个或者多个字段的组合作为主键,称为"复合主键"。例如,在employee表中,因为姓名和出生日期字段组合后也具有唯一性,所以其组合也可以作为employee表的复合主键。

    数据库中表与表通过主键与外键进行关联,修改表中的主键值会对数据库中数据的维护带来非常大的麻烦,应该尽量避免被修改,但是由于自然主键也表示了表中的业务逻辑信息,所以存在一定的被修改概率。例如:在某些运行系统中,如果数据库的某些表使用身份证号作为主键,则在最近的这次身份证号码从15位升级到18位的过程中,增加了不必要的系统升级的工作量。

    在数据库设计中应该尽量避免使用自然主键,而使用代理主键。

    3.1.2  代理主键

    在数据库表中采用一个与当前表中逻辑信息无关的字段作为其主键,即代理主键这样的主键一般可以采用数据库中自动增长的生成机制自动生成主键值,字段名通常命名为"id"。

    例如,在Oracle数据库中主键值即可采用序列生成;在MySQL和MS SQL Server数据库中代理主键的字段类型设置为自动增长(auto increment)类型,数据类型一般为整形(Integer)。

    展开全文
  • 数据库主键、唯一键、范式

    千次阅读 2015-07-29 11:36:14
    能够唯一表示数据表中的每个记录【字段】或者【字段】组合就称为主码(主键)。一个主键是唯一识别一个表每一记录,但这只是其作用一部分,主键主要作用是将记录和存放其他表中的数据进行关联。这一点上...

    主键:
    能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码(主键)。一个主键是唯一识别一个表的每一记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。主键约束就是确定表中的每一条记录。主键不能是空值。唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值。所以,主键的值对用户而言是没有什么意义,并且和它要赋予的值也没有什么特别的联系。

    外键:
    若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键。外键约束主要用来维护两个表之间数据的一致性。

    主键是唯一的不能重复,非空的。

    唯一键可以为空,但不可以重复。


    第一范式(1NF)

    数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。
    首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程名称、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,所关心的问题有如下几个方面。
    学生有那些基本信息
    学生选了那些课,成绩是什么?
    每个课的学分是多少
    学生属于那个系,系的基本信息是什么。

    第二范式(2NF)

    首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。
    (学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
    问题分析
    因此不满足第二范式的要求,会产生如下问题
    数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
    更新异常:
    1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。
    2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
    删除异常 :假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
    解决方案
    把选课关系表SelectCourse改为如下三个表:
    学生:Student(学号,姓名,年龄,性别,系别,系办地址、系办电话);
    课程:Course(课程名称,学分);
    选课关系:SelectCourse(学号,课程名称,成绩)。

    第三范式(3NF)

    接着看上面的学生表Student(学号,姓名,年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:
    (学号)→ (姓名,年龄,性别,系别,系办地址、系办电话
    但是还存在下面的决定关系
    (学号) → (系别)→(系办地点,系办电话)
    即存在非关键字段"系办地点"、"系办电话"对关键字段"学号"的传递函数依赖。
    它也会存在数据冗余、更新异常、插入异常和删除异常的情况。(数据的更新,删除异常这里就不分析了,可以参照2.1.1进行分析)
    根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:
    学生:(学号,姓名,年龄,性别,系别);
    系别:(系别,系办地址、系办电话)。
    上面的数据库表就是符合I,Ⅱ,Ⅲ范式的,消除了数据冗余、更新异常、插入异常和删除异常。


    1NF:字段不可分;
    2NF:有主键,非主键字段依赖主键;
    3NF:非主键字段不能相互依赖;

    解释:
    1NF:原子性 字段不可再分,否则就不是关系数据库;
    2NF:唯一性 一个表只说明一个事物;
    3NF:每列都与主键有直接关系,不存在传递依赖;

    不符合第一范式的例子(关系数据库中create不出这样的表):

    表:字段1, 字段2(字段2.1, 字段2.2), 字段3 ......

    存在的问题: 因为设计不出这样的表, 所以没有问题;

    不符合第二范式的例子:

    表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;

    这个表明显说明了两个事务:学生信息, 课程信息;

    存在问题:

    数据冗余,每条记录都含有相同信息;
    删除异常:删除所有学生成绩,就把课程信息全删除了;
    插入异常:学生未选课,无法记录进数据库;
    更新异常:调整课程学分,所有行都调整。

    修正:

    学生:Student(学号, 姓名, 年龄);

    课程:Course(课程名称, 学分);

    选课关系:SelectCourse(学号, 课程名称, 成绩)。

    满足第2范式只消除了插入异常。


    不符合第三范式的例子:

    学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";

    存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

    存在问题:

    数据冗余:有重复值;

    更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

    删除异常

    修正:
    学生:(学号, 姓名, 年龄, 所在学院);
    学院:(学院, 地点, 电话)。
    作者:sunxing007

    展开全文
  • 数据库中的数据表之间关系

    万次阅读 2012-12-14 16:56:16
    主键:能够唯一表示数据表中的每个记录字段或者字段组合就称为主键。一个主键是唯一识别一个表每一行记录,但这只是其作用一疗分,主键主要作用是将记录和存放其他表中的数据进行关联,这一点上,主键...

    主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。

    外键:

    若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。

    A为基本表,B为信息表。

    在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据主键的值来确定不同的记录。

    关系:外键一定是另外某个表的主键。

     

    表关系
    可以在数据库关系图中的表间创建关系以显示某个表中的列如何链接到另一表中的列

    在关系数据库中,关系能防止冗余的数据。例如,如果正在设计一个数据库来跟踪有关书的信息,而每本书的信息(如书名、出版日期和出版商)都保存在一个名为 titles 的表中。同时还有一些想保存的有关出版商的信息,例如出版商的电话号码、地址和邮政编码。如果将所有这些信息都保存在 titles 表中,则对于某个出版商出版的每本书,出版商的电话号码将是重复的。

    一个更好的解决方案是,单独在一个名为 publishers 的表中只保存一次出版商信息。然后在 titles 表中设置指针,以引用 publishers 表中的项。

    若要确保数据同步,可以在 titles 表和 publishers 表之间强制引用完整性。引用完整性关系能确保某个表中的信息与另一个表中的信息相匹配。例如,titles 表中的每个书名必须和 publishers 表的特定出版商相关联。不能在数据库中添加数据库中不存在的出版商的书名。

    为更好地理解表关系,请参见:

    表关系类型


    引用完整性概述
    表关系类型
    关系是通过匹配键列中的数据而工作的,而键列通常是两个表中具有相同名称的列。在大多数情况下,关系将一个表中为每个行提供唯一标识符的主键与另一个表中外键内的项相匹配。例如,通过在 titles 表的 title_id 列(主键)和 sales 表的 title_id 列(外键)之间创建一个关系,可以使销售额与特定的销售书名相关联。

    表与表之间存在三种类型的关系。所创建的关系类型取决于相关联的列是如何定义的。

    一对多关系


    多对多关系


    一对一关系
    一对多关系
    一对多关系是最常见的关系类型。在这种关系类型中,表 A 中的行可以在表 B 中有许多匹配行,但是表 B 中的行只能在表 A 中有一个匹配行。例如,publishers 表和 titles 表是一对多的关系:每一个出版商可出版许多书,但每一本书只能有一个出版商。

    如果在相关列中只有一列是主键或具有唯一约束,则创建的是一对多关系。

    一对多关系中的主键方由一个键 符号表示。关系中的外键方由一个无穷大 符号表示。

    多对多关系
    在多对多关系中,表 A 中的一行可与表 B 中的多行相匹配,反之亦然。通过定义称为连接表的第三方表创建这样的关系,该连接表的主键包括表 A 和表 B 中的外键。例如,authors 表和 titles 表是多对多关系,该关系通过从这些表中的每个表与 titleauthors 表的一对多关系定义。titleauthors 表的主键由 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)组成。

    一对一关系
    在一对一关系中,表 A 中的一行最多只能与表 B 中的一行相匹配,反之亦然。如果两个相关列都是主键或具有唯一约束,则创建的是一对一关系。

    这种关系不常见,因为这种方式的大部分相关信息都在一个表中。使用一对一关系可以是为了:

    分割一个含有许多列的表。


    出于安全考虑而隔离表的某一部分。


    存储可以很容易删除的临时数据,只需删除表即可删除这些数据。


    存储只应用于主表子集的信息。
    一对一关系的主键方由键 符号表示。外键方也由键 符号表示。


    候选键 (candidate key)
    对于表中的每一行具有唯一值的一个列或一组列。每个候选键值唯一标识表中的一个行。表可以具有多个候选键。表中的一个候选键由数据库设计器指定为表的主键,其它候选键称作备用键。



    ---以上内容摘自SQL SERVER 2000的联机帮助。

    若想得到有关更详细的内容,请参见帮助!

    展开全文
  • 数据库

    2015-11-21 20:54:26
    1.Left join 与Right join ...能够唯一表示数据表中的每个记录字段或者字段组合就称为主键。一个主键是唯一识别一个表每一行记录,但这只是其作用一疗分,主键主要作用是将记录和存放其他表

    1.Left join 与Right join

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

    2.主键、外键

    能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值

    而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。                

    3.Order by && Group by

    order by 是按表中某字段排列表中数据,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。

    group by 是按某些字段分类。从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

    例如按
    1.按年龄排序表中的记录

    select * from users order by age

    2.按年龄分类表中数据(就是求各个年龄的人数)

    select age,count(*) as number1 from users group by age

    展开全文
  • ArcGIS 使用所有表和要素类必须包含一个能够唯一标识每行或每个要素字段。要 ArcGIS 中用作唯一标识符,字段必须不为空、包含唯一值,并且属于以下数据类型之一:整型(仅限正值)字符串GUID日期型由于唯一...
  •  一、指纹识别的技术原理 指纹识别的技术原理是从指纹数据库中查找与采集指纹是否匹配指纹数据,达到通过辨别身份实现开关门锁目的。其基本原理如图1所示,指纹识别系统由指纹图像采集、指纹图像预处理、指纹...
  • 并且,最终说来,产生价值并不是绚丽界面和现代化输入方式,而是存放在数据库中的数据。不幸是,虽然关系型数据库历经了约30年发展,有成熟理论和大量实践基础,但是,大多数设计、开发人员在设计...
  • 并且,最终说来,产生价值并不是绚丽界面和现代化输入方式,而是存放在数据库中的数据。不幸是,虽然关系型数据库历经了约30年发展,有成熟理论和大量实践基础,但是,大多数设计、开发人员在设计...
  • 一、指纹识别的技术原理指纹识别的技术原理是从指纹数据库中查找与采集指纹是否匹配指纹数据,达到通过辨别身份实现开关门锁目的。其基本原理如图1 所示,指纹识别系统由指纹图像采集、指纹图像预处理、指纹特征...
  • 1会员的基本情况 会员商场消费商场管理员会对会员信息以及消费情况进行管理 一会员的基本信息 开通会员是每个会员有唯一的会员号这也是能够唯一识别会员的标号其入会时有 一个时间就是他的入会时
  • 会员的基本情况 会员商场消费商场管理员会对会员信息以及消费情况进行管理 会员的基本信息 开通会员是每个会员有唯一的会员号这也是能够唯一识别会员的标号其入会时有一个时间就是他的入会时间然后为
  • WEB渗透测试数据库

    2017-04-01 14:25:15
    将多个字典文件merge到数据库中 对每个字典项进行打分计算 按照评分高低导出字典文件 例如: # 按照评分高低从数据库password.db中导出字典文件pass.txt,长度为100 wordlist.py -d pass.txt ../user-password/...
  • 内容主要集中大多数企业常见问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备基本uniix...
  • Fisher数据库的实验结果表明基于深层的cFSMN的识别系统相比于主流的基于BLSTM的识别系统可以获得13.8%的相对词错误率下降。最后,本文提出一种用于高维数据建模的新模型,称之为联合优化正交投影和估计(Hybrid ...
  • 在数据库中能够唯一识别每一条记录一个字段或者多个字段组合,称之为主键(Primary Key)。主键主要作用将表中记录数据和其他表中数据进行关联。作为主键需要满足如下条件: 主键值所在字段不能...
  • 像.net中的session一样,假设能知道了数据库中的sessionID,那全部的操作都能知道了,由于有了这个唯一的身份识别的标识。 能够做的事情有非常多,如:当前哪个用户做什么操作,运行什么sql, 又如一个比較大的...
  • 比如美团的金融、支付、餐饮、酒店、猫眼电影等产品的系统,数据日益增长,将数据库分表后需要一个唯一的ID来标示一条数据或消息,数据库的自增ID显然不能满足需求,特别是订单、骑手、优惠券也需要有唯一的ID才能...
  • 微软公司通用唯一识别码(UUID)Twitter公司雪花算法(SnowFlake)基于数据库的id自增其中,使用数据库进行id自增是单机应用使用最普遍id生成方式,它能够完全保证id不重复。但id自增并不是任何数据库都支持...
  • 比如美团的金融、支付、餐饮、酒店、猫眼电影等产品的系统,数据日益增长,将数据库分表后需要一个唯一的ID来标示一条数据或消息,数据库的自增ID显然不能满足需求,特别是订单、骑手、优惠券也需要有唯一的ID才能...
  • php生成标准uuid(guid)方法

    千次阅读 2018-02-06 18:38:24
    其目的,是让分布式系统的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。 使用UUID的好处是,能够保证独立性,程序可以不同的...
  • 唯一的要求是接收组件能够读取 XML。作为一项工业标准,XML 正是谨记这种互操作性的情况下设计的。 可维护性 已部署系统的生存期中,适度的更改是可能的,但由于十分困难,所以很少尝试进行实质的结构更改。这...
  • 用来建立数据库连接的唯一服务名。如果要没有调度程序情况下仍能连接到数据库, 请将该值设置为与例程名相同。此参数自 8.1.3 版起已废弃。 值范围: 根据操作系统而定。 默认值 :0 mts_sessions: 说明 : 指定...
  • 在数据库中能够唯一识别每一条记录一个字段或者多个字段组合,称之为主键(primary key).主键作用将表中记录数据和其他表中数据进行关联. 自然主键和复合主键. 代理主键:在数据库表中采用一个与...
  • 暴力破解能力强:验证码带有唯一的uuid ,实际上有效期内无法进行暴力破解。 数据库清理:所有经过验证的代码都会自动从数据库中删除,以最大程度地降低成本。 1.安装 $ npm install -g @serverless/components ...
  • Cookie

    2020-12-22 18:35:55
    由于HTTP服务器是无状态的,当一个Web站点希望能够识别用户时,便使用...1.当用户首次访问某Web站点时,Web站点服务器会产生一个唯一的识别码,并以该识别码作为索引后端数据库中产生一个表项。同时用一个包含Set-coo
  • 8.3.4 使用通配符找到某个字符串另一个字符串中的起始位置 223 8.3.5 检测字符串相似度 224 8.3.6 获取字符串最左和最右部分 224 8.3.7 检测字符串中的字符数或者字节数 225 8.3.8 把字符串一部分替换...
  • 1 Cookie简介 Cookie:是一个服务器与客户端之间来回传递文本值机制...cookie可以存储会话标识,使得web服务器能够通过cookie存储同服务器端购物车数据库对应的唯一ID,来识别哪个购物车属于当前用户。这样,...
  • 数据挖掘-源码

    2021-02-10 01:15:46
    PVA捐助者客户细分,使他们有可能更好地了解其捐助者行为,并数据库中更好地识别捐助者/潜在捐助者不同细分 介绍我们数据 为了直观地从我们数据中挖掘出潜在相关属性,其中属性数量为:475,示例/...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

在数据库中能够唯一的识别