数据库主外键

主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。

外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。

外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

主外键的关系结构:

1,一对一,不用引用主外键,把它们放一个表中即可

例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可

2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。

例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;

3,多对多关系,需要创建一个表,表中需要两个字段,分别是引用,两个多对多字段主键的外键。

例如:

学生表(学号,姓名,…………)主键:学号
课程表(课程号,课程名,…………)主键:课程号
一个学生能选多门课,一个课可以由多个学生选,即是多对多关系,
那么成绩表就是它们之间关系的体,
即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键

在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系

下面一起来简单看一下大概建成的表结构

时间: 2024-10-10 07:36:06

数据库主外键的相关文章

论数据库主外键的优劣

在前段时间面试了一家算是正规的大公司,因为有工作经验,不用笔试直接进入技术面试,真心是抓瞎了.工作里,也许是自己不够上进,仅仅是学会了如何使用编程实现功能,没时间也不会去考虑性能的问题,真是失败,我都不好意思再说自己是程序员了. 剖析下,面试遇到的问题.数据库的外键你认为有用么?遇到这个问题,瞬间想起了自己工作以来,在设计表的时候,会为表添加外键,但是在生成sql语句时,会不自觉的将外键这一项关闭.原因就是,外键会有约束,那么在增删改的时候,总是会有约束验证的问题,甚是反感.回归主题,分析外键的

数据库主外键约束

--增加表cw_users的外键约束fk_users_group,表中的group_id受表cw_users_group中的主键id约束begin transactionalter table cw_users add constraint fk_users_groupforeign key (group_id)references cw_users_group([id]) on update cascade on delete cascadecommit transaction

数据库主外建适用场景

主键和索引是不可少的,合理使用可以优化数据检索速度 焦点:数据库设计是否需要外键.这里有两个问题: 一.如何保证数据库数据的完整性和一致性: 二.创建外键对性能的影响. 正方观点:1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性.eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的.

Django 外键、多对多插入数据方法

models.py class UserInfo(models.Model): username = models.CharField(max_length=64,db_column='username') passwd = models.CharField(max_length=64,db_column='password') register_date = models.DateTimeField(max_length=32,db_column='register_date') last_l

PHP数据连接主键与外键!

设置MySQL数据表主键: 使用"primary key"关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与"auto_increment"递增数字相结合.如下SQL语句所示: Mysql>create table books(bookid int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,bookname varchar(50)); Mysql>insert into books(bookname

MySQL DDL操作--------外键最佳实战

1. 背景 * MySQL有两种常用的引擎类型MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束. * 本表的列必须与外键类型相同, 外键必须是外表的主键 * 设置外建的列不能设置 NO NULL 字段属性. 2. 外建作用 * 使两张表形成关联,外键只能引用外表中的列的值 * 保持数据一致性,完整性,控制存储在外键表中的数据 3. 外键实验 [ 员工 --> 部门 ] * 创建外键依赖的外表 departments mysql> CREATE TABLE departmen

主键外键

主键 外键 唯一键 CHECK约束 主键:是唯一的,不可重复的,它能提高查询效率,但是会减慢新增数据效率 外键:主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的. 外间的取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除.(4)更新主键记录时,同样有

SQL反模式学习笔记5 外键约束【不用钥匙的入口】

2014-10-11 14:53:20 目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外键建立的索引会影响性能: 4.当前使用的数据库不支持外键.比如MySQL的MyISAM存储引擎,或者比SQLite3.6.19早的版本: 5.定义外键的语法并不简单,还需要查阅. 反模式:无视约束,即不使用约束 省略外键约束能使得数据库设计更加简单.灵活,或者

SQL 数据库主键 ,外键

主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自