zoukankan      html  css  js  c++  java
  • 数据库设计

    三种关系
    1:1 一对一对应 x中的一个实体最多与y中一个实体关联,y中一个实体最多与x中一个实体关联

    1:N 一对多  X中一个实体与y中任意数量实体关联, y中一个实体最多与x中一个实体关联

    N:1 多对一 x中一个实体最多与y中一个实体关联, y中一个实体与x中任意数量的实体关联

    M:N  多对多 x中一个实体与y中任意多个实体关联,y中一个实体与x中任意多个实体关联

    建表时:

    (x)1 : 1(y)    x表和y表,各自建主键(pk)

    (x)1 : n(y)    x表和y表,各自建主键(pk),y表建外键(fk)关联x表主键

    (x)n : 1(y)    x表和y表,各自建主键(pk),x表建外键(fk)关联y表主键

    (x)m : n(y)   x表和y表,各自建主键(pk),再建一个中间表x_y表(x,y关系表)建主键,再建两列外键和x表和y表关联

    note:更新主外键关系表时,需先操作对应从表记录,再操作主表记录
    第一范式:
    每列的原子性 (每列的属性值不可再分)

    第二范式:
    表中每列都与主键相关    (比如房间号是主键, 房间描述,客房状态,床位数,价格等组成一个完整的客房实体,其它列都依赖于主键)

    第三范式:
    在第二范式的基础上更进一层,要求其它列和主键直接相关,而不是间接相关,根据依赖传递的理论,比如房间号->房间类型->价格  (此时价格和房间号属于间接相关,需要拆分表)

    外键:

    外键:  (外键列会在建立外键时自动创建btree索引)
    语法:
    create table temp(
    id int,
    name char(20),
    foreign key(id) references outTable(id) on delete cascade on update cascade);

    alter table 'xx' add 'xx' int not null after 'descr';
    alter table '表名' add constraint 约束名 约束类型 具体约束说明
    alter table xx表 add constraint fk_user_id foreign key (user_id) references user(id);

    删除外键
    语法: ALTER TABLE table-name DROP FOREIGN KEY key-id;
    例:   ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`

    更新和删除外键关系的实体时的行为
    on update       on delete

    RESTRICT(限制外表中的外键改动)   
    CASCADE(跟随外键改动)
    SET NULL(设空值)
    SET DEFAULT(设默认值)
    NO ACTION(无动作,默认的)

    note:
    on delete:

    当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,
    首先检查该记录是否有对应外键,如果有则不允许删除。


    当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,
    如果有则也删除外键在子表(即包含外键的表)中的记录

    当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,
    如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    on update:
    当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,
    首先检查该记录是否有对应外键,如果有则不允许更新。

    当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,
    如果有则也更新外键在子表(即包含外键的表)中的记录。

    当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,
    如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

  • 相关阅读:
    html学习总结
    16--二叉树的镜像
    17-- 从上到下打印二叉树,按层打印。
    14--反转链表
    14--合并两个排序的链表
    15-- 输入两个二叉树A和B,判断B树是否包含于A树。
    13--输入一个整数数组,实现一个函数来调整数组中数字的顺序
    13--输出链表中倒数第k个节点,
    12--打印1到最大的N为数字。
    10--输入一个十进制的整数,转化为二进制,输出有多少个1
  • 原文地址:https://www.cnblogs.com/isdom/p/webclips045.html
Copyright © 2011-2022 走看看