- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL 数据库的约束及数据表的设计原理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
。
数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性。 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间.
之前介绍过 MySQL 中的数据类型,数据类型其实就能够对一部分数据进行校验。约束也一样,同样能够对一些数据进行校验工作。这样就可以尽量避免出现一些非法的数据 。
。
常见约束的类型有以下几种:
not null
: 指示某列不能存储 null 值unique
: 保证某列的每行必须是唯一值,不能有重复default
: 规定没有给列赋值时的默认值primary key
: 表示主键,是 not null
和 unique
的结合。确保某列(或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定的记录foreign key
: 保证一个表中的数据匹配另一个表中的值的参照完整性check
: 保证列中的值符合指定的条件。对于 MySQL 数据库,可以使用 check,但是其使用结果忽略。
如果不使用 not null,即表示默认情况下可以插入 null(即这列的值可以不填) 。
但是例如做一些调查问卷时,就有必填项,此时这些选项就不能为空,就可以使用 not null 。
示例:
作用: 使用 not null 后插入值不能为 null 。
。
如果不使用 unique,那么某列不同行的值是可以重复的.
但实际生活中,例如身份证号码、电话号码等等其实是一个唯一值,此时就可以使用 unique 。
示例:
作用: 使某列的值都是唯一的,不能重复 。
注意:
当列有 unique 约束时,进入插入前,就先会查找,如果要插入的值不存在,才会进行插入,因此使用 unique 其实会影响效率,但总的来说利大于弊.
。
当我们不使用 default 去指定列的默认值时,该默认值就为 null,如果你想改变某列的默认值,就可以使用 default 。
示例:
作用: 可以指定某列的默认值 。
。
primary key 是主键,表示了一个记录的身份标识,相当于同时使用 not null 和 unique 。
示例:
作用: 指定主键 。
注意:
补充: 自动增量 —— auto_increment 。
MySQL 可以自动的为每个行分配下一个可用的编号,不用在添加一行时手动分配唯一值(可以手动分配唯一值)。但是必须用在 create 创建表的时候,例如:
注意:当使用自动增量和手动分配混搭时,这个唯一值就不一定是有序的了 。
。
foreign key 是外键约束,可用于关联其它表的主键或唯一值 。
例如淘宝购物的话,一个数据库中可以有商品表和订单表两个数据表,而这两个表都可以包含商品编号。而订单表里面的商品编号一定是商品表里面有的前提下才可以出现。因此就可以使用外键来约束,防止非正常数据出现 。
示例:
作用:
外键约束将两张表绑定起来,其中被约束的表可以叫做子表,约束别人的表叫做父表,如果子表中的列要插入的值在父表中关联的主键或唯一值中没有,那么将插入将会失败 。
注意: 外键约束会导致父表中的记录不能直接删,那么想要删除父表的记录该怎么做呢?(例如要下架某个商品,该商品的编号也就没了) 。
解决思路: 逻辑删除(不直接删除数据库的记录,没有打破外键约束) 。
在商品表中引入一个新的字段,通过这个字段表示该记录是有效还是无效的。可以令这个字段默认值为1,即表示有效,如果要删除这个商品,就把这个字段改为0,此时该商品就无效了.
。
check 约束是可以指定某列可以填入的数据,例如性别,就只能填入男或者女 。
注意:
MySQL 中现在还不支持该约束,即使用了,也会忽略该约束的影响 。
示例:
。
当我们掌握了基本的数据库的操作方法后,如果我们要面对一个从零开始建表的操作,势必要对我们需要的实体和它们之间的关系有一个很好的把握.
实体之间的关系主要存在以下四种:
。
例如一个学生对应着有一个系统的用户身份,我们就可以有两种设计方式 。
将学生信息和用户信息放到一个表中 。
。
学号 | 学生姓名 | 用户名 | 用户密码 |
---|---|---|---|
2001 | 张三 | 三娃 | *** |
2002 | 李四 | 四娃 | *** |
2003 | 王五 | 五娃 | *** |
。
将学生放到 A 表中,用户信息放到 B 表中,在 B 表中可以插入学生学号来将学生和用户进行关联 。
A 表:
。
学号 | 学生姓名 |
---|---|
2001 | 张三 |
2002 | 李四 |
2003 | 王五 |
。
B 表:
用户名 | 用户密码 | 学生学号 |
---|---|---|
三娃 | *** | 2001 |
四娃 | *** | 2002 |
五娃 | *** | 2003 |
。
例如一般一个中学学生和班级之间是一对多的关系,一个学生只能有一个班级,一个班级里面可以有多个学生.
我们通常可以设计两张表,存放学生信息的 A 表,和班级信息的 B 表,在学生信息中添加班级来进行关联 。
A表:
学号 | 学生姓名 | 班级id |
---|---|---|
2001 | 张三 | 1 |
2002 | 李四 | 1 |
2003 | 王五 | 2 |
B 表
班级id | 班级名称 |
---|---|
1 | 高三(1)班 |
2 | 高三(2)班 |
。
例如大学生和课程之间,就是一个多对多的关系,一个学生可能有不同的多个课程,一个课程也有很多个学生来选择.
这时我们设计三个表,分别为存放学生信息的 A 表、存放课程信息的 B 表和将学生与课程联系起来的中间表 C 表 。
A表:
学号 | 学生姓名 |
---|---|
2001 | 张三 |
2002 | 李四 |
2003 | 王五 |
B 表:
课程id | 课程名 |
---|---|
1 | 高等数学 |
2 | 大学物理 |
3 | 数据库理论 |
C 表:
学号 | 课程id |
---|---|
2001 | 1 |
2001 | 2 |
2002 | 1 |
2002 | 3 |
2003 | 1 |
到此这篇关于MySQL 数据库的约束及数据表的设计原理的文章就介绍到这了,更多相关MySQL 数据库的约束及数据表设计内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/weixin_51367845/article/details/121496956 。
最后此篇关于MySQL 数据库的约束及数据表的设计原理的文章就讲到这里了,如果你想了解更多关于MySQL 数据库的约束及数据表的设计原理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个带有嵌套数据的 angular 数据表,我正在尝试在行点击函数上创建另一个数据表。父数据表的 rowCallBack 函数。 这是我的外部数据表 html; 这是我生成数据表的方
我有一个字母数字列,其中包含诸如“1、2、2”之类的字符串。 当我在搜索中输入“1, 2, 2”时,它似乎返回带有“1,”和“2,”的所有单元格。 我该怎么做才能使搜索仅返回“1、2、2”? 使用数据
我有一个获取其数据服务器端的表,使用自定义服务器端初始化参数,这些参数因生成的报告而异。表格生成后,用户可以打开一个弹出窗口,他们可以在其中添加多个附加过滤器以进行搜索。我需要能够使用与原始表相同的初
在 datatables我希望能够隐藏所有列,但似乎无法正确使用语法。 这来自下面的代码和上面的链接,创建了一个显示所有列的按钮。有没有办法写这个以便我可以隐藏所有列? {
我正在使用 DataTable 创建一个交互式表。我有 9 列,其中 5 列是值。我想根据它们的具体情况更改每个单元格的背景颜色。 我已经开始尝试首先更改整行颜色,因为这似乎是一项更容易的任务。但是我
我有一个简单的例子来说明我的问题。我正在使用数据表 1.9。当数据表位于另一个 html 表内时,水平滚动时列标题不会移动。当它不在 html 表中时它工作正常。我的示例实际上取自他们的水平滚动示例,
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
这是添加按钮以将数据导出到 csv、pdf、excel 的数据表示例...... fiddle here https://datatables.net/extensions/buttons/examp
是否有任何方法可以更改 angularjs 数据表中的按钮样式(colvis、copy、print、excel)。 vm.dtOptions = DTOptionsBuilder.newOptions
我试图弄清楚如何加入 2 个数据表并更新第一个但应用了过滤器。 DT DT2 b c 1: 1 10 2: 2 10 3: 3 10 4: 4 10 5: 5 10 6: 6 10 7: 7 10
我有一个数据表,其中包含许多包含值的列。我还有另一列,它定义了我需要选择哪些列的值。我很难找到一种方法来做到这一点。 这是一个简单的例子。 > d d value.1 value.2 name
我正在使用 data.table 包。我有一个数据表,表示用户在网站上的操作。假设每个用户都可以访问一个网站,并对其执行多项操作。我的原始数据表是 Action (每一行都是一个 Action ),我
我想知道每个变量在每个组中变化了多少次,然后将结果添加到所有组中。 我是这样找到的: mi[,lapply(.SD, function(x) sum(x != shift(x), na.rm=T)
有人可以向我解释一下如何向页眉或页脚添加按钮吗?Datatables 的开发者 Alan 说你必须离开网络服务器才能使用 Table Tools 来使用按钮。但我在独立计算机上离线运行 Datatab
我希望按 id 和按顺序(时间)计算不同的东西。 例如,与: dt = data.table( id=c(1,1,1,2,2,2,3,3,3), hour=c(1,5,5,6,7,8,23,23,23
我正在尝试在 JIRA 小工具中使用数据表,但在我的表准备就绪后,没有可用的分页按钮。我有一个表,我正在以最简单的方式使用数据表:$("#mytableid").dataTable(); 浏览页面元素
我有 responsive 表单中的数据表。 数据表生成 child rows在小型设备上。在这一行中,我有一些输入控件。这会导致两个问题。 第一个问题:**隐藏子行中的值不会进入表单数据。** 第二
我在使用 JQuery DataTable 捕获 keydown 事件时遇到问题。我的目标是允许用户使用箭头键导航表的行。因此,当用户按下箭头键时,我想捕获 keydown 事件并移动表的选定行(这是
是否有任何方法可以以编程方式更改显示的行数,而无需从下拉列表中手动选择? 我已经知道如何更改默认行数。当表首次加载时,我希望它加载所有行,然后“刷新”表以可能仅显示前 10 行。但我想以编程方式刷新表
我有一个数据表,我应该对其进行更改,例如我想更改内容的状态,但该内容位于表的第三页。当我更改它时,数据表会自行刷新到第一页。我想做的是保留选定的页码并在刷新后回调它。这可能吗? 顺便说一句,我正在使用
我是一名优秀的程序员,十分优秀!