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支持外键

时间: 2024-10-25 07:11:24

mysq数据库设计(主键与外键)的相关文章

逻辑数据库设计 - 无视约束(谈外键)

有一些开发人员不推荐使用完整性约束,你可能听过以下这么几点不使用外键的原因. 1.数据更新有可能和约束冲突. 2.当前的数据库设计如此灵活,以致于不支持引用完整性约束. 3.数据库为外键建立的索引会影响性能. 4.当前使用的数据库不支持外键. 5.定义外键的语法并不简单,还需要查阅. 一.反模式:无视约束 即使第一感觉告诉你,省略外键约束能使得数据库设计更加简单.灵活,或者执行更加高效,你还是不得不在其他方面付出相应的代价 -- 必须增加额外的代码来手动维护引用完整性. 1.完整性问题 很多人对

SQL数据库中的主键与外键的介绍

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

[数据库]关于主键与外键

本文参考自:http://blog.csdn.net/bingqingsuimeng/article/details/51595560 一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯

【数据库】主键,外键,主表,从表,关联表,父表,子表

转自:https://www.2cto.com/database/201707/662425.html 一.前言 在数据库设计中,hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的. 二.概述 下面从数据库设计角度,ORM框架使用(以Hibernate为例),PowerDesigner软件以及实际业务角度进行一下介绍. (1) 数据库角度而言 主键:一般情况下

数据库中主键与外键

在关系型数据库中,数据结构有逻辑结构和物理结构.物理结构指存储在物理介质上的数据文件的结构.逻辑结构即关系,也就是一张张的二维表.表中的一列即为一个字段(属性),代表的是实体的一个属性.表中的一行即为一条记录. 如:学生表中(学号,姓名,年龄,性别),在该表中有4个字段,代表学生实体的4个属性.表中的一行数据(001,张三,男,20),即一条记录,表示的是张三这个学生的信息.    在表中,用来唯一标识一条记录的字段集,叫做主关键字或者主关键码,简称主键(主码),而主键包含的属性(字段)叫做主属

Chapter 1. 数据库概述、主键、外键

数据库 database: 存储数据的仓库,用表来分类数据 特点:海量存储:查找速度快:并发性问题的控制:安全性:数据完整性(保存在数据库中的数据是正确的真实的) 数据库软件:DBSM   database management system 常见数据库软件:MySQL  MSSQL server  Oracle  Access SQL:Structured Query Language 结构化查询语言   特点:语言简洁.易学易用. SQL Server:是一种基于网络的大型数据库软件.主要用

数据库的主键与外键

数据库的主键与外键 一.什么是主键.外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如:   学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键 成绩表中的学号不是

数据库中的主键和外键

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号 姓名 性别 班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键 成绩表中的学号不是成绩表的主键但它和学生表中的学号相对应并且学生表中

用自己设计的表(包括主键,外键约束)填充DataSet类

1.创建一个内存表,定义主键约束等 2.声明基类数组并赋值,再把数组当做行添加到Rows中 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; namespace ConsoleApplication2 { class Pr

数据库—超键、候选键、主键、外键

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键候选键(candidate key):不含有多余属性的超键称为候选键主键(primary key):用户选作元组标识的一个候选键成为主键外键(foreign key)如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键. 结合实例的具体解释: 假设有如下两个表:学生(学号,姓名,性别,身份证号,教师编号)教师(教师编号,姓名,工资) 超键:由超键的定义可知,学生表中含有学号或