<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>
今天生成hibernate映射文件时,看到文件中属性是<key-property>,感觉奇怪,以前没接触过,查了一下资料,终于弄明白了。
现整理出来,以便以后查阅:
1、什么是联合主键?
联合主键就是表中2个或者2个以上的字段做为这个表的主键,通常多对多的关系表中使用联合主键.例如有表学生,表课程,另外一个表选课,选课表用来记录每个学生所选的课程,这个选课表就可以用联合主键.
SQL 2005中可以用
-
SQL code
- CREATE TABLE [学生]( [学生ID] [int] NOT NULL, [学生姓名] [varchar(20)] NULL, CONSTRAINT [PK_学生] PRIMARY KEY CLUSTERED ( [学生ID] ) ) CREATE TABLE [课程]( [课程ID] [int] NOT NULL, [课程名称] [varchar(50)] NULL, CONSTRAINT [PK_课程] PRIMARY KEY CLUSTERED ( [课程ID] ) ) CREATE TABLE [选课]( [学生ID] [int] NOT NULL, [课程ID] [int] NOT NULL, CONSTRAINT [PK_选课] PRIMARY KEY CLUSTERED ( [学生ID], [课程ID] ) )
- 2)联合主键SQL语句怎么写?
主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。
建立主键有两种方法:一种是在数据库提供的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…………)
GOALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
GO- 3)Hiebrnate映射文件中单个主键和联合主键的区别?
- 单个主键:<id> <property>
- 联合主键:<composite-id> <composite-id>