联合主键和数据库中的三种表

时间:2022-02-23 04:39:32
在一张表中建立两个主键
建立联合主键有两种方法
1.建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。

1).在数据库提供的GUI环境中建立(以SQL7为例)。
输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。

2).通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。
在建表语句中直接写:

Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3…………
字段名N………… )

建表之后更改表结构:

CREATE TABLE 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null
字段名3…………
字段名N…………)
GO

ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
GO

2、建立联合主键的例子(很好的例子)
联合主键用于字段中内容都可重复的表
如公司部门人员表,里面包含部门名,职工姓名等字段, 每个部门中的人无重名,部门间可能有重名,如果设部门名为主键,则部门里有不止一个人,部门名有重复,如果设姓名为主键,则部门间人员可能有重名,也不唯一。
将部门名和职工姓名一起设为主键,这两个字段加起来不可能重复

3、联合主键的好处
联合主键的好处是不需要因为需要主键而增加一个无用的主键列 例如如果不用联合主键你必须增加个列ID设置主键 但这个ID列无任何作用
至于在什么情况下使用,就像刚才举例的,当你这个表的主键ID无任何用处,那么就用联合主键好了,你可以节约一个列的空间,但如果这表的ID列要做为别的表的外键的话,就不能用联合主键了。


4、建立数据库表的原则是
必须遵循:1)表的字段越少越好
       2)、表的数目越少越好
       3)、表的关系越简单越好
       4)、表的低级冗余是不允许的,但允许表的高级冗余
                                       
6、我个人觉得建立主键的由来都是因为减少数据的冗余而设立的。哈哈只是个人认为而已。
7、基本表、中间表和临时表(三种表)
-1)、基本表相信大家都知道,就是存储不能再分割的基本信息的表
-2)、临时表:SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。
临时表有两种类型:
本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。
全局临时表:全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。
现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。
相关链接: http://1632004.blog.163.com/blog/static/29991497201123110435805/
3)、中间表则为在两张n:m的表中通过中间的表来建立起来关系,所以出现中间表(个人理解)