Java EE之旅09-数据库基础(3)

数据完整性

作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束、规范

完整性的分类:

  1. 实体完整性
  2. 域完整性
  3. 引用完整性

下面分别进行介绍。

1 实体完整性

实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复。
约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)

1.1 主键约束(primary key)
    注:每个表中要有一个主键。
    特点:数据唯一,且不能为null
    例子:
        第一种添加方式:
            create table student(
                id int primary key,
                name varchar(50)
            );
            
        第二种添加方式:此种方式优势在于,可以创建联合主键
            create table student(
                id int,
                name varchar(50),
                primary key(id)
            );
            create table student(
                classid int,
                stuid int,
                name varchar(50),
                primary key(classid,stuid)
            );
            
        第三种添加方式(适用于表已经创建好的情况):
            create table student(
                id int,
                name varchar(50)
            );
            alter table student  add  primary  key (id);
            

1.2 唯一约束(unique):
    特点:数据不能重复。
    例子:
        create table student(
            id int primary key,
            name varchar(50) unique
        );

1.3 自动增长列(auto_increment)  
    注意:sqlserver数据库 (identity)  oracle数据库( sequence)

    给主键添加自动增长的数值,列只能是整数类型
    create table student(
        id int primary key auto_increment,
        name varchar(50)
    );
    数据插入的时候会id自动增长
    insert into student(name) values(‘tom’);

2 域完整性

域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较(域代表当前单元格)

域完整性约束分类:数据类型 非空约束(not null) 默认值约束(default)
注意:check约束(mysql不支持)check(sex='男' or sex='女')

2.1 数据类型:(数值类型、日期类型、字符串类型等)
    数据类型本身就是一种域的完整性约束
    
2.2 非空约束:not null
    create table student(
        id int pirmary key,
        name varchar(50) not null,
        sex varchar(10)
    );
    name不能为空
    insert into student values(1,null,'女');

2.3 默认值约束 default
    create table student(
        id int pirmary key,
        name varchar(50) not null,
        sex varchar(10) default '男'
    );
    
    insert into student1 values(1,'tom','女');
    insert into student1 values(2,'jerry',default);

3 引用完整性(参照完整性)

外键约束:FOREIGN KEY 
例:
    create table student(
        sid int pirmary key,
        name varchar(50) not null,
        sex varchar(10) default ‘男’
    );
    
    create table score(
        id int,
        score int,
        sid int , -- 外键列的数据类型一定要与主键的类型一致
        constraint fk_score_sid foreign key (sid) references student(id)
    );
    第二种添加外键方式。
    alter table score1 add constraint fk_stu_score foreign key(sid) references stu(id);

表与表之间的关系

  1. 一对一:例如t_person表和t_card表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:
    1. 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;
    2. 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。
  2. 一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!
  3. 多对多:例如t_stu和t_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。
image.png

通过SQLyog的Schema Designer图形化界面可以看出来:

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容