← 前一天目录后一天 →

每日科普 · 2026-10-02 周五

考研 408 × 求职面试

知识点 · 数据库系统 · 基础

关系模式、关系实例与实体完整性规则

1. 关系模式是“表的结构定义”,描述表名、列名、数据类型和约束,例如:学生(学号,姓名,年龄),其中学号为主键。它相当于表头加约束,一般不随数据变化。 2. 关系实例是某一时刻表中实际存放的数据集合,例如:{(1001,张三,20),(1002,李四,21)}。同一关系模式可对应多个关系实例,增删改会改变实例,但不改变模式。 3. 实体完整性规则:若关系有主键,则主键值不能为空(NULL),且主键整体必须唯一,用于唯一标识每个元组。通俗说,每行必须有“身份证号”,不能缺失,也不能重复。 注意:主键可由一个或多个属性组成;复合主键要求组合值非空且唯一,单个属性可重复,但组合不能重复。它保证实体可区分。

每日一题 · 数据库系统

关系模式、关系实例与实体完整性规则

关于关系模式、关系实例与实体完整性规则,下列说法正确的是? A. 关系模式是动态数据,关系实例是静态结构 B. 同一关系模式只能对应一个关系实例 C. 主键值可以为空,只要其他属性非空即可 D. 关系模式定义结构,关系实例是某时刻的数据,实体完整性要求主键非空且唯一

解析

D。关系模式是相对稳定的结构定义;关系实例是某时刻的具体数据,会随增删改变化,同一模式可有多个实例,故A、B错。实体完整性要求主键非空且唯一,用于唯一标识元组,故C错。复合主键看组合值非空且唯一。

面试小贴士 · 数据库系统

关系模式、关系实例与实体完整性规则

面试常问:关系模式与实例区别?主键为何不能为空?答:模式是表结构,实例是当前数据;实体完整性保证每行可区分,主键非空且唯一。易错:把模式当数据、混淆主键与候选键、忽略复合主键组合唯一。

代码实现 · C

代码示例

#include <stdio.h>

typedef struct { int id; char name[20]; } Student; // 关系模式:学号、姓名

int insert(Student r[], int *n, Student s) {
    if (s.id <= 0) return -1; // 简化表示主键为空/非法
    for (int i = 0; i < *n; i++)
        if (r[i].id == s.id) return -2; // 主键必须唯一
    r[(*n)++] = s;
    return 0;
}

int main() {
    Student r[10] = {{1001, "张三"}, {1002, "李四"}}; // 关系实例
    int n = 2;
    Student a = {1001, "王五"}, b = {0, "赵六"}, c = {1003, "钱七"};
    printf("%d\n", insert(r, &n, a)); // -2:主键重复
    printf("%d\n", insert(r, &n, b)); // -1:主键为空
    printf("%d\n", insert(r, &n, c)); // 0:插入成功
    return 0;
}
← 前一天目录后一天 →