SQL SERVER 数据库主键和外键的思考

SQL SERVER 数据库主键和外键的思考

什么是主键: 主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中

什么是主键:

        主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据,所一经常来定义标识列。

每一个表都必须定义一个主键吗?

        我个人认为这个问题要看我们的表的功能,利用来存储大量数据,并需要经常查询的,建立主键可以加快查询效率,从而降低服务器的负担,但是如果没有这样的需求,建立主键反而消耗资源,所以这种情况下就没有必要建立主键了。

        有些人认为:虽然在有些数据库中,主键不是必须的,但是最好为每个表都设置一个主键,不管是但主键还是复合主键,它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

 

主键的作用:

1、  从上面的定义可以看出,主键是用于唯一标识数据库表中一行数据的。

2、  作为一个可以被外键有效引用的对象。

主键的设计原则:

1、  主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id;而这种情况就不可能了:“学生表”需要支持这样的需求“学生注销后,可以重新激活自己的信息,而且还要保持自己的号码跟原来的一直”,这样的话主键就不能满足要求了。

2、  唯一性,这个原则就不用多说了。

3、  非空性:主键的值是不可重复的,也不可以为空。

什么是外键:

        外键是建立于表与表之间的联系,方便程序的编写。

外键的特点:

1、  外键保证了数据的完整性

2、  使用外键,简单直观,可以直接在数据模型中体现,无论是设计、维护等等。

3、  外键在调试程序的时候可能会带来一些麻烦。

如何插入外键:

\

 

如上图所示,数据库中有三个表,下面我们给news和category表设置关系

\

 

如图所示,邮件单击“数据库关系图”,选择“新建数据库关系图”

\

 

出现上面的“添加表”

选择要添加的表的名称,将这三个表全部添加到里面去(如下图所示)

\

 

我们将news的categoryId设置为category的Id的外键


\

\

 

单击添加按钮


\

 

选择上边的“表和列规范”左边的三个小点号的按钮,点开后如下图所示

\

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】

问题 C: 磨刀 时间限制: 1 Sec 内存限制: 128 MB提交: 190 解决: 39[提交] [状态] [讨论版] [命题人:admin]题目描述 磨刀是一个讲究的工作,只能在n℃下进行,所以我们首先要做的就是把刀的表面温度提升到n℃。处理刀身温度有两种方式:1.淬火…

统计各个函数的耗时_分享一次CMS GC耗时狠高优化过程全记录

1. 背景多个业务线的应用出现LongGC告警最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。2. 知识回顾2.1 JVM堆内存划分新生代(Young Generation)新生代内被划分为三个区:Eden,from survivor,to survivor…

string类有可以调换方向的函数吗_深度剖析C++中的inline函数

点蓝色字关注“CurryCoder”微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜1.inline函数的爱恨两难内联函数比宏优点好很多,详细原因请参见尽量以const、enum、inline替换#define 。调用内联函数不需要承受函数调用所导…

javafx基础教程_JavaFX教程–基础

javafx基础教程JavaFX似乎正在RIA领域获得发展。 有了正确的工具和开发支持,它肯定会成为下一个最佳技术“物”的代价。 我没有在这里写任何JavaFX评论,因为有很多技术评论可能对它进行了广泛的评论,但是,我将编写一个简单的教程&…

什么是Spring Boot以及为什么它是用于创建微服务的首选框架

为什么要使用Spring Boot创建微服务? Spring Boot是Java领域众所周知的首选框架,用于创建Micro Services。 使用Spring引导框架,可以非常轻松地创建Java应用程序。 现在,我们将看到Spring启动框架的一些功能,这使其成为…

嵌入式开发有年龄限制吗_什么?!考教资有年龄限制了?2020年我还能考吗?...

近几年教师资格证越来越火爆越来越多的人都想报考,却又担心年龄问题,那么考教师资格证有年龄限制吗?下面小编就给大家解答一下这个问题:报考教师资格证是没有年龄限制的,只有学历限制。报考幼师教师资格证的考生必须是…

Python3的bytes/str之别

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节…

jframe透明_使JFrame透明

jframe透明首先创建一个带有滑块的框架,该滑块将用于设置透明度量。 import javax.swing.JFrame; import javax.swing.JSlider;public class TransparentFrame extends JFrame {public TransparentFrame() {setTitle(Transparent Frame);setSize(400,400);setDefaul…

Python关于Threading暂停恢复解决办法

我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志…

NetBeans Java EE技巧9:从数据库创建JSF应用程序

您需要非常快速地创建数据库前端吗? NetBeans IDE允许人们以极少的编码就非常快速地为一组数据库表开发JSF应用程序前端。 现在,本教程既是老歌,又是老歌……对于那些不了解它的人来说,值得再次提及。 首先,创建您的应…

[模板]树链剖分

用途 我想把一个本来是线性的东西放到树上做,维护路径或者是子树的各种性质,那就用树剖呗 它可以套线段树、树状数组、ST表(以及其他我不知道的) 做法 我们考虑把树分成一条条链,然后对每条链维护我们的数据结构&#…

python tab和空格混用_我的 Python 编码规范

python 文件的组成为了便于描述,先上一个 demo#!/usr/bin/env python# -*- coding: utf-8 -*-"""通常这里是关于本文档的说明(docstring),须以半角的句号、 问号或惊叹号结尾!本行之前应当空一行,继续完成关于本文档的说明如果…

Twitter创始人Jack Dorsey的每日必做和不做清单

Twitter创始人Jack Dorsey显然是这段时间以来技术界的中心人物,不仅发表了一系列的文章,而且一本反映Twitter早期岁月的书也即将出版。今天,他又在Y Combinator的Startup School上发表了讲话,不过在谈话中Dorsey回避了一切不必要及…

JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性

Java 8引入了JSR-308,它为Java语言添加了新的注释功能。 最重要的是:键入注释。 现在可以像下面这样设计怪物了: 比注解更疯狂的是类型注解。 在数组上。 谁认为这是有效的Java代码? pic.twitter.com/M9fSRRerAD — Lukas Eder&…

oem是代工还是贴牌_食用油OEM贴牌代工业务要注意哪些问题?

近年来食用油OEM业务逐渐增加,OEM是英文 Original Equipment Manufacturer的缩写,被译为代工生产或贴牌生产,通常是指品牌商委托有生产能力且品质有保证的油脂加工厂来生产食用油产品,对自己及对方的品牌不会有冲突,且…

java 简化判断_简化Java内存分析

java 简化判断作为一名典型的Java开发人员,除了遵循关闭连接,流等典型的最佳实践外,我从未监视过应用程序的内存使用情况。最近,我们在JBoss服务器中遇到了一些问题,不得不深入研究内存管理Java中最好的事情之一是&…

DRF的序列化组件

rest rest下的url url唯一代表资源,http请求方式来区分用户行为 url的设计规范 GET: 127.0.0.1:9001/books/       # 获取所有数据 GET: 127.0.0.1:9001/books/{id}      # 获取单条数据 POST: 127.0.0.1:9001/books/      # 增…

15crmo焊接后多长时间探伤_承压设备渗透探伤检测方法简单操作思路

啥是渗透检测渗透检测俗称渗透探伤,是一种以毛细管作用原理为基础用于检查表面开口缺陷的无损检测方法。它与射线检测、超声检测、磁粉检测和涡流检测一起,并称为5种常规的无损检测方法,渗透检测始于本世纪初,是目视检查以外最早应…