zoukankan      html  css  js  c++  java
  • mysq数据库设计(主键与外键)

    主键可以是真实实体的属性,但是常用的好的解决方案是,利用一个与实体信息不相关的属性,作为唯一标示(加个id字段)
    主键与业务逻辑不发生关系,只用来标示记录

    可以在定义完字段后,再定义多列主键(组合主键) 例:primary key(id,name,age);(不是说3个字段都是主键,
    因为一个表只能有一个主键,可以是3个字段组合成的主键)


    设计:

    两个实体表内,存在相同的主键字段

    如果记录的主键值等于另一个关系表内记录的主键
    则两天记录对应 1:1对应  数据库设计的时候(常用的信息和不常用的信息分开存放)称为:垂直分割 劣势:数据冗余,结构冗余


    1:n ,1一对多
    一个实体,对应多个其他实体,例如一个班级对应多个学生

    设计:在多的那端,增加一个字段,用与指向该实体所属的列的实体标志

    2、N:N  多对多

    设计: 典型的,利用一个中间表 ,表示实体之间的对应关系




    外键 foreign key 概念:如果一个实体的(student)的某个字段(class_id),
    指向(引用)另个实体的主键,就称student实体的外键

    被指向的实体,称之为实体(主表),也叫父实体(父表)  class
    负责指向的实体,称之为从实体(从表),也叫子实体(子表) student

    作用:用于约束处于关系内的实体,增加子表记录时,是否有与之对应的父表记录
    在删除或者更新主表记录时,从表应该如何处理相关的记录

    定义一个外键:在从表上,增加一个字段,指向主表的主键,

    在最后增加  foreign key(外键字段) regerences itcast_class(class_id) on delete set null
    设置字符集  character set  utf8;

    设置级联操作
    在主表数据发生改变时,与之关联的从表数据应该如何处理
    主表更新:
    主表删除
    使用关键字
    On update
    On delete

    允许的级联动作
    Cascade关联操作,如果主表被跟新或删除,那么从表也会执行相应的操作
    Set null 设置为null,表示从表不指向任何主表记录
    Restrict 拒绝主表的相关操作

    alter table xxx add foreign key (yyy_id) references yyy(yyy_id)
    xxx:表示从表 yyy表示主表 yyy_id表示外键

    醉了,看到现在说这些一般在项目中不用 --!!!

    只有InnoDB支持外键

  • 相关阅读:
    ceph服务日志分析
    ceph 守护进程管理
    ceph 数据一致性检查(scrub)
    ceph osd坏盘更换
    OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)
    SharePoint REST API 获取文件夹下的项目数
    SharePoint REST API 设置SummaryLength属性
    庄子逍遥哲学的六个主要思想
    详细解说,无人机构造及原理
    如何写好项目规划和方案设计文档
  • 原文地址:https://www.cnblogs.com/hhfhmf/p/4827538.html
Copyright © 2011-2022 走看看