生成Surrogate Key的几种方案

本文探讨了数据库中维度表和事实表的代理键生成策略,包括更新方式抽取维度表、利用SequenceGeneratorTransformation生成代理键及理解其在既有插入与更新操作时产生的不连续性。

1)维度表一般使用方法(维度表如果清空重新抽取,代理键可能不一样了,需要重新抽取事实表,建议维度表一般采用更新的方式抽取)

取得维度表最大的WID,然后在其基础上累加生成新的代理键插入维度表

 

2)事实表的数据量很大,代理键的意义也不是很重要,一般用Sequence Generator Transformation去生成代理键。

Sequence Generator Transformation每一行都必然会走NEXTVAL,所以,当既有插入又有更新操作时,会产生不连续的代理键是正常的

### 数据库中表的类型及常见数量 #### 的分类 数据库中的主要用于确保数据的完整性和唯一性,以下是常见的类型及其定义: 1. **主(Primary Key)** 主是用于唯一标识表中每一行记录的字段或字段组合。主字段不允许存储 `NULL` 值,并且必须保证其值的唯一性[^1]。例如: ```sql CREATE TABLE employees ( employee_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50) ); ``` 2. **候选(Candidate Key)** 候选是指能够唯一标识表中每条记录的一个或多个字段。一个表可以有多个候选,但只能选择其中一个作为主[^2]。例如,在员工表中,`employee_id` 和 `email` 都可以作为候选。 3. **外(Foreign Key)** 外用于建立和强化两个表之间的关系。它通常引用另一个表的主,从而实现表之间的关联[^2]。例如: ```sql CREATE TABLE orders ( order_id INT PRIMARY KEY, employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(employee_id) ); ``` 4. **唯一(Unique Key)** 唯一确保字段中的所有值都是唯一的,但它允许存在一个 `NULL` 值。与主不同的是,一个表可以有多个唯一[^2]。例如: ```sql CREATE TABLE users ( user_id INT PRIMARY KEY, email VARCHAR(100) UNIQUE ); ``` 5. **代理Surrogate Key)** 代理是一种人工生成,通常是一个自增整数或全局唯一标识符(GUID)。它用于避免通过主的值就可以了解一些业务信息[^1]。例如: ```sql CREATE TABLE products ( product_id INT PRIMARY KEY AUTO_INCREMENT, -- 代理 product_name VARCHAR(100) ); ``` 6. **复合(Composite Key)** 当单个字段无法唯一标识记录时,可以使用由多个字段组成的组合。这种称为复合。例如: ```sql CREATE TABLE order_details ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id) -- 复合 ); ``` #### 的数量 - 一个表只能有一个主,但主可以由一个或多个字段组成。 - 一个表可以有多个候选,但只能选择其中一个作为主。 - 一个表可以有多个唯一。 - 一个表可以有多个外,每个外对应一个关联表。 - 代理通常作为主的一部分,因此数量与主一致。 #### 示例代码 以下是一个包含多种类型的表设计示例: ```sql CREATE TABLE employees ( employee_id INT PRIMARY KEY AUTO_INCREMENT, -- 主/代理 email VARCHAR(100) UNIQUE NOT NULL, -- 唯一 department_id INT, FOREIGN KEY (department_id) REFERENCES departments(department_id) -- 外 ); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值