mysqL表的约束与设计

表的约束

主键约束(每一个表必须有一个主键列

         primarykey:不允许为空,不允许重复

         加入约束后,如果不遵守会报错。

                   eg:createtable student

           (

               id int primary key,

               name varchar(40)

           );

主键自动增长

         auto_increment:自动增加

             eg:create tablestudent

           (

               idint  primary key auto_increment,

               namevarchar(40)

           );

唯一约束

    unique:唯一

       eg:create tablestudent

           (

               idint primary key auto_increment,

               namevarchar(40) unique

           );

非空约束

    not null:不为空

       eg:create tablestudent

           (

               idint primary key auto_increment,

               namevarchar(40) unique not null

           );

外键约束

    constraint ordersid_FK foreign key(ordersid)references orders(id),

    eg:create tablehusband

       (

           id int primary key,

           name varchar(40)

       );

       create table wife

       (

           id int primary key,

           name varchar(40),

           husband_id int,      此处为外键列,类型要和husband表的主键列一样

        constrainthusband_id_FK foreign key(husband_id) references husband(id)

解释:定义约束,名称为husband_id_FK,外键约束作用在husband_id列上,这一列的值参考husband 表中id这一列的值

       );

 

表的设计

一对多或多对一的对象存到数据库时,表的设计方案

分析:每个员工只有一个部门,一个部门有多个员工

原则:首先建立部门表与员工表只向表中存基本属性,然后在多的一方加外键描述数据的关系,此处多的   一方为员工表


部门和员工

create tabledepartment

(

    id int primary key,

    name varchar(40)

);

create tableemployee

(

    id int primary key,

    name varchar(40),

    salary decimal(8,2),

    department_id int,

    constraint department_id_FK foreignkey(department_id) references department(id)

);

 

 

多对多对象的表的设计

分析:每个学生有多个老师,每个老师有多个学生

原则:首先建立老师表与学生表只向表中存基本属性,再建立一个中间表命名一般为“表1_2”,在中         间表加上外键约束。(有时为了查询快,也可以只建立一个表,但是会出现数据的冗余)


老师和学生

create tableteacher

(

    id int primary key,

    name varchar(40),

    salary decimal(8,2)

);

create tablestudent

(

    id int primary key,

    name varchar(40)

);

create tableteacher_student

(

    两列同为主键列,也可再定义一个id为主键列

    teacher_id int,

    student_id int,

    primary key(teacher_id,student_id),

    constraint teacher_id_FK foreignkey(teacher_id) references teacher(id),

    constraint student_id_FK foreignkey(student_id) references student(id)  

);

 

一对一的对象的数据库设计

分析:一个人有一个身份证,一个身份证对应一个人。

原理:首先建立人表与身份证表只向表中存基本属性,我们最初的想法是在身份证表或人表中加入一个外  键列,此外键列要求加入外键约束、唯一约束、非空约束,但在人表或者身份证表中的外键列id         就存在唯一约束与非空约束,因此只需要把人表或者身份证表的外键列id设置外键约束就行了。


人与身份证

create table person

(

    id int primary key,

    name varchar(40)

);

create table idcard

(

    id int primary key,

    city varchar(40),

    constraint id_FK foreign key(id) referencesperson(id) 

);

 

自连接的表的数据库设计

分析:家族存在父子关系嵌套

原理:首先建立人表,在其中建立一个列来表示关系


家族自连接关系

create table person

(

    id int primary key,

    name varchar(40),

    parent_id int,

    constraint parent_id_FK foreignkey(parent_id) references person(id)

);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值