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,一经查实,立即删除!

相关文章

在Gradle 2.13中更好地处理“在插件Y上找不到属性X”

您可能从未听说过的服务缺少用户名,密码或令牌? 这通常发生在您尝试执行任何操作(例如仅构建项目)时,不仅发生在使用给定的插件(例如在线代码覆盖工具)时。 我不想修改我的环境,而只…

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…

用JDBC直连方式访问SQL Server 2005详解

用JDBC直连方式访问SQL Server 2005详解 1.安装JDK,配置其环境变量:(笔者所用版本为1.6版) (1)从官方网http://java.sun.com/jdk下载安装文件。 (2)安装下载下来的安装包,按照提示安装成…

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

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

javafx基础教程_JavaFX教程–基础

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

prepareStatement与Statement的区别

prepareStatement与Statement的区别 1:创建时的区别: Statement stmcon.createStatement(); PreparedStatement pstmcon.prepareStatement(sql); 执行的时候: stm.execute(sql); pstm.execute(); 2: pstm一旦绑定了SQL,此pstm就不能执行其他的S…

什么是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…

MyEclipse下Tomcat启动变慢的解决方法

项目忽然使用debug启动有时候会突然变得非常慢。不但启动慢,启动之后连打开项目标页面也很慢,是日常平凡的4,5倍。可以有下面的几种解决方法: 1、由于Tomcat是服务器,部署好的工程就会一直驻留到服务器里,每次启动都会把部署到服务…

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

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

stm32l4 外部中断按键会卡死_STM32学习之路-按键中断测试(外部中断)

void RCC_Config(void){SystemInit(); //系统时钟初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE | RCC_APB2Periph_G…

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

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

[模板]树链剖分

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

sql server 2005单独添加mdf文件

我把原来的数据库分离后,直接把日志文件给干掉了。原来在SQL 2000里经常这么干,只用一个mdf就附加了。没想到sql2005居然不行。我试验了一圈 终于找到一个成功的方法。转载,供后来者参考。SQL2005 如何在没有日志文件的情况下如何恢复MDF数据…

低压抽屉柜常见故障处理方法_低压配电设备常见故障分析,处理办法介绍

低压配电线路作为配电网络中主要的一部分,在其运行的过程中直接影响着人民的生命财产安全。配电线路是电力输送的终端,对于提高电力质量有着至关重要的作用。但由于配电线路走径的复杂性,人为因素和设备因素,都会给低压配电设备造…

关于C语言中的'\?'和%%

关于C语言中的\?和%% 一、引语 我们知道C/C中有四个非字母的字符需要用转义字符来表示:单引号 , 双引号 " , 反斜杆 \ 和问号 ? 显然这是因为它们本身有特殊的含义,所以要用转义字符来表示他们自己,单引号用来表示单个字符&#xff0…