常见应用的数据表结构设计

12002

本课介绍

本课中,我们将进一步学习数据表结构设计的关键要点。在应用开发中,常见的有一张表的应用和三张表的应用。我们先学习如何在应用开发中设计一张数据表,包括如何命名表格、定义字段、选择适当的数据类型以及设置主键,以确保数据的完整性和准确性。我们还将介三张表的应用,学习如何设计关系表,包括数据ID的构建,和使用冗余字段的方法,以便在多张表之间建立正确的关联,实现数据的有效管理和查询。通过本课程的学习,深入了解数据表结构设计的关键概念,掌握在应用开发中设计和管理数据表的实用技巧,从而提高数据管理和应用开发的能力。

1.理解数据表之间的关系:一张表的应用和三张表的应用

在应用开发中,想要设计出好的数据表结构,一定要理解数据表之间的关系。根据应用类型的差异,我们将应用分为两种主要类型:一张表的应用和三张表的应用。

一张表的应用是最简单的,只需要设计一张数据表来存储所有数据,实现数据的增删改查;而在三张表的应用中,需要设计三张表,包括两张实体表和一张关系表,这就需要理解数据表之间的关系,根据业务需求将数据分解存储在不同的表中,以更好地管理数据。

2.一张表的数据表结构设计

一张表的应用中,为了根据业务需求设计出合适的数据表,需要考虑表的命名规范、字段定义、选择合适的数据类型以及设置主键和自增ID等因素。这些步骤的目标是确保数据表结构能够准确存储所需数据并满足应用开发需求。

我们以江湖脚手架中的1table-crud项目为参考,帮助大家理解一张表应用的数据结构设计。

阅读江湖脚手架文档:1table-crud

表名的命名规范

江湖脚手架中的1table-crud项目,本质上是一个简单的学生信息管理系统,用于存储和展示学生的所有信息。因此,我们在设计数据表时,需考虑表名是否能够清晰地反映数据表存储的内容和用途,以便于开发人员理解和维护数据库结构。因此,我们在这个项目中创建了一张名为student的学生表,用于存储学生信息。这样的命名规范有助于提高数据库结构的可读性和可维护性。

定义字段:字段名

确定了数据表名,就可以定义表中的字段了。根据业务需求,表中需要存储的内容有:学生的学号、姓名、年龄、性别、年级、班级等,我们可以这样定义:

  • 学号 (studentId):每位学生独有的识别号码
  • 姓名 (studentName):学生的名字
  • 年龄 (age):学生的年龄
  • 性别 (gender):学生的性别,可以是男、女
  • 年级 (level):学生所在的年级
  • 班级 (classId):学生所在的班级
  • 身高(bodyHeight):学生的身高

这样定义的字段名清晰易懂,能够准确地反映出我们需要存储的信息。如果未来业务需求有变化,我们可以随时对字段进行调整。

使用常用数据类型(int,decimal,varchar)

在定义字段时,需要选择适当的数据类型和长度来存储数据。通常情况下,建议选用字符串型 (VARCHAR),并设置长度为255。VARCHAR 类型允许存储可变长度的字符串数据,可以存储不同长度的文本数据,基本能够满足各种字段的存储;指定长度为 255 时,可以容纳大多数常见的字符串数据,同时又不会占用过多的存储空间。比如:

  • 学号 (studentId):字符串型 (VARCHAR),长度255;
  • 姓名 (studentName):字符串型 (VARCHAR),长度255;
  • 性别 (gender):字符串型 (VARCHAR),长度255;
  • 年级 (level):字符串型 (VARCHAR),长度255;
  • 班级 (classId):字符串型 (VARCHAR),长度255;
  • 身高(bodyHeight):字符串型 (VARCHAR),长度255;

如果需要存储的数据类型为整数,则建议选用整数型 (INT),并设置长度为11,也可以根据实际情况调整长度。比如:

  • 年龄 (age):整数型 (INT),长度11;

如果需要存储带有小数部分的数据,可以使用小数型 (DECIMAL),可以根据实际需要调整小数位数。在DECIMAL数据类型中,参数表示总长度和小数点后的位数。比如:

  • 身高(bodyHeight): (DECIMAL(4,1));

主键与自增ID

完成了字段的定义和数据类型的设置,接下来重要的一步,就是设置主键。我们一般使用自增ID生成主键。在学生表"student"中,增加一个字段:

  • 自增ID(id):整数型 (INT),长度11;

将该字段设定为主键,并设置为自动递增。这样,每当插入一条新的学生记录时,数据库会自动为该学生分配一个唯一的自增ID,以确保每个学生记录都有一个唯一的标识符。需要注意的是,自增ID对于业务数据来说没有实际意义,主要用于数据库内部管理和优化查询性能。

综上,我们可以使用SQL语句创建一张student表:

  1. -- 学生表
  2. CREATE TABLE student (
  3. id INT PRIMARY KEY AUTO_INCREMENT,
  4. studentId VARCHAR(255),
  5. studentName VARCHAR(255),
  6. age INT(11),
  7. gender VARCHAR(255),
  8. level VARCHAR(255),
  9. classId VARCHAR(255),
  10. bodyHeight DECIMAL(4,1)
  11. );

3.三张表的数据表结构设计

在三张表的应用中,需要设计两张实体表和一张关系表。两张实体表就是根据业务需求设计出合适的数据表,与设计一张表遵循相似的原则。不同之处在于关系表的设计,这需要考虑如何构建数据ID以及使用冗余字段。接下来,我们以江湖脚手架中的3table-crud项目为参考,来理解三张表的数据表结构设计。

阅读江湖脚手架文档:3table-crud

实体表:数据ID的构建

江湖脚手架中的3table-crud项目,实际上是一个稍微复杂些的学生管理系统,涉及到学生管理、班级管理以及学生和班级之间关系的管理。因此,除了学生表student和班级表class的设计外,我们还需要设计一个关系表来存储学生和班级之间的关联。

首先,让我们来看一下这两个实体表的设计。三张表的应用中,为了区分业务数据中的不同实体,我们通常会构建数据ID。比如在学生表、班级表中,除了自增ID外,我们为学生和班级都设置了数据ID,以确保每个学生和班级都有唯一的标识符。这个数据ID类似于每个实体的身份证号,能够帮助系统准确地识别和管理不同的数据记录。

按照数据表的设计规则,我们可以这样设计实体表:

  • 学生表
  1. -- 学生表
  2. CREATE TABLE student (
  3. id INT PRIMARY KEY AUTO_INCREMENT,
  4. studentId VARCHAR(255), // studentId 为数据ID
  5. studentName VARCHAR(255),
  6. age INT(11),
  7. gender VARCHAR(255),
  8. level VARCHAR(255),
  9. classId VARCHAR(255),
  10. bodyHeight DECIMAL(4,1)
  11. );
  • 班级表
  1. CREATE TABLE class (
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. classId VARCHAR(255), // classId 为数据ID
  4. className VARCHAR(255)
  5. );

关系表:使用冗余字段

接下来,我们来设计关系表。通常在设计关系表时,为了提升数据查询的效率,可以考虑使用冗余字段来优化关系表的设计,减少表之间的关联。

首先,我们需要确定实体表中哪些字段可以建立学生和班级之间的关系,并将这些字段作为关系表中的冗余字段:

  • 学生表student:包含的字段有studentId, studentName, age,gender等
  • 班级表class:包含的字段有classId, className等

显然,我们希望能够通过班级直接查询到该班级下的所有学生信息,因此,可以选择将 studentId 和 classId 作为冗余字段存储在关系表中。这样设计可以简化查询操作,提高系统的查询效率。

我们可以将这张表命名为student_class,表示它是一张关系表,存储了学生和班级之间的关联信息,字段的定义如下:

  • 自增ID(id):关系表的主键,用于唯一标识每条关联信息;整数型 (INT),长度11;
  • 学号 (studentId):学生ID,作为冗余字段存储在关系表中,用于关联学生表中的学生信息;字符串型 (VARCHAR),长度255;
  • 班级号 (classId):班级ID,也作为冗余字段存储在关系表中,用于关联班级表中的班级信息;字符串型 (VARCHAR),长度255;
  • 入学日期(joinAt):入学日期,记录学生加入班级的日期信息;字符串型 (VARCHAR),长度255;

这样,当某个学生加入某个班级时,会在关系表增加一条记录。在此设计中,每个学生只能加入一个班级,确保了学生信息在班级管理中的简单有效性。

综上,我们可以使用SQL语句创建一张student_class表:

  1. CREATE TABLE student_class (
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. studentId VARCHAR(255),
  4. classId VARCHAR(255),
  5. joinAt VARCHAR(255)
  6. );

这样,通过合适地构建数据ID和使用冗余字段设计关系表,我们建立了一个完整的学生管理系统。数据ID的设计需要考虑到不同表之间的关联关系,以确保每条记录都能被准确标识,从而支持系统的正常运行和数据操作。同时,通过使用冗余字段优化关系表的设计,我们简化了查询操作,提高了系统的查询效率,使数据处理更加高效和可靠。