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)。

  • 相关阅读:
    React Native 触摸事件处理详解
    ReactNative iOS源码解析
    windows CMD命令大全及详细解释和语法
    Node.js的全局对象和全局变量
    移动端HTML5<video>视频播放优化实践
    HTML和CSS代码片段快速编写方式(Emmet Documentation)
    animate.css官网
    Gradle在大型Java项目上的应用
    Gradle学习系列
    Gradle -- buildScript块与allprojects块及根级别的repositories区别
  • 原文地址:https://www.cnblogs.com/isdom/p/webclips045.html
Copyright © 2011-2022 走看看