← 前一天目录后一天 →

每日科普 · 2026-09-14 周一

考研 408 × 求职面试

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

关系模型的基本概念:关系、元组、属性与域

关系模型用一张张二维表来组织数据,理解它的四个基本概念是入门的钥匙。 1. 关系(Relation):一张二维表就是一个关系,对应现实中的一类事物,比如「学生表」。表中的每一行都描述一个具体对象。 2. 元组(Tuple):表中的一行称为一个元组,代表一个实体或一条记录,例如某个学生的全部信息。 3. 属性(Attribute):表中的一列称为一个属性,代表实体的一个特征,如学号、姓名、年龄。每个属性有唯一的属性名。 4. 域(Domain):属性取值的范围或集合,是取值范围相同的值的集合。例如「性别」的域是{男,女},「年龄」的域可设为0~150的整数。 由此还衍生出几个概念:元组中一个属性的值叫分量(必须是原子的,不可再分);能唯一标识元组的属性或属性组称为候选码,选其中一个作主码;关系的描述即关系模式,常写成R(A1,A2,…,An)。注意关系与表并非完全等同,关系要求元组不重复、属性有序而元组无序。

每日一题 · 数据库系统

关系模型的基本概念:关系、元组、属性与域

在关系模型中,下列关于「域(Domain)」的说法,正确的是(  )。 A. 域就是表中的一行数据 B. 域是属性的取值范围,同一属性下的所有取值都必须来自同一个域 C. 域是能唯一标识元组的属性组 D. 一个属性可以同时属于多个不同的域

解析

正确答案:B。域是属性取值的集合(范围),例如性别域为{男,女}。A项「一行数据」是元组,概念混淆;C项「唯一标识元组的属性组」是候选码/主码的定义,不是域;D项错误,每个属性都定义在某个确定的域上,取值必须落在该域内。理解技巧:属性=列,元组=行,关系=表,域=列的取值范围,四者一一对应、不可混用。

面试小贴士 · 数据库系统

关系模型的基本概念:关系、元组、属性与域

面试常问「关系、元组、属性、域分别对应表的什么」,标准答法是一一映射:关系对表、元组对行、属性对列、域对取值范围。易错点:把元组说成列、把域与候选码混淆。补充一句「属性值必须原子、元组不重复」会加分。

代码实现 · C

代码示例

#include <stdio.h>
#include <string.h>

/* 关系的每一列都有属性名和对应的域 */
typedef enum { MALE, FEMALE } Gender; /* 性别域 */

/* 元组:关系中的一行,字段即各属性的分量 */
typedef struct {
    int    id;        /* 属性 学号, 域: 正整数 */
    char   name[20];  /* 属性 姓名, 域: 字符串 */
    int    age;       /* 属性 年龄, 域: 0~150 */
    Gender gender;    /* 属性 性别, 域: {男,女} */
} Student;

/* 校验分量是否落在其域内,是则输出该元组 */
int insert(const Student *t) {
    if (t->id <= 0 || t->age < 0 || t->age > 150) {
        printf("元组超出属性域,拒绝插入\n");
        return 0;
    }
    printf("元组: %d %s %d %s\n", t->id, t->name, t->age,
           t->gender == MALE ? "男" : "女");
    return 1;
}

int main(void) {
    Student s1 = {1001, "张三", 20, MALE};
    Student s2 = {1002, "李四", 200, FEMALE}; /* age 越界 */
    insert(&s1);
    insert(&s2);
    return 0;
}
← 前一天目录后一天 →