数据库设计规范 数据库图书管理系统设计
哈喽,亲爱的同学们!
在上一章节中,我们简要地分析了项目需求。现在,让我们继续深入探讨项目的创建和数据库设计。鉴于个人偏好,我在设计时选择了不使用外键的方案。关于外键的优劣,这里不再过多讨论,感兴趣的同学可以自行搜索了解。下面,让我们开始进入正题。
系统采用Microsoft Visual Studio Enterprise 2022版本(64位),具体版本号为17.0.1进行创建。
说明:
我们的项目结构如下:
FlyingHat.Common - 通用公共类库
FlyingHat.Extensions - 公共插件及扩展库
FlyingHat.Model - 基础设施层,主要包含实体、枚举、逻辑类等
FlyingHat.Repository - 仓储层,用于处理数据交互
FlyingHat.Service - 业务逻辑层
FlyingHat.Web - 展现层,主要是页面显示。在创建时,我们选择了ASP.NET Core Web应用(模型-视图-控制器)选项。
对于其他项目,我们一律选择类库选项。
特别说明:
本项目并未采用DDD(领域驱动设计)进行开发。一方面是因为对DDD的理解还不够深入,在普通的公司环境中,同事们的技术水平、开发方式各不相同。我们更多关注产品的维护和升级,对于开发新产品,通常也不是从基础框架开始。最适合自己的框架和风格才是最重要的。我设计的结构仅供各位同学参考。
目前涉及的表有:
学生表
图书表
图书室表
书架表
图书分类表
借还书表
对于菜单和权限等模块,我们认为它们并非初期就需要的设计,而是在项目中期或末期统一规划。我的习惯是最后统一设计菜单和权限,这样可以避免影响前期的开发进度。
实体类设计:
实体特别说明:
BaseContext - 实体上下文,用于管理实体。在BaseContext中重写OnModelCreating方法以生成种子数据,这里默认生成一个超级管理员用户。需要注意的是,OnModelCreating方法在每次数据迁移时都会执行,如果有更多的种子数据需要执行,可以写成一个调用方法,并注意在每次迁移时根据需要决定是否需要重新执行种子数据生成。
关于具体实体的内容,请各位同学下载源码以获取详细信息。这里不再做详细的描述。
为了方便管理,我们选择使用可视化管理界面而不是命令安装的方式进行操作。
包说明:
Microsoft.EntityFrameworkCore - 版本:6.0.0。EFCore实体框架,用于对象数据库映射。安装在FlyingHat.Model项目中。
Microsoft.EntityFrameworkCore.Tools - 版本:6.0.0。用于NuGet Package Manager控制台的实体框架核心工具,主要用于数据迁移。详细说明将在后续的数据创建部分给出。安装在FlyingHat.Web项目中。
Pomelo.EntityFrameworkCore.MySql - 版本:6.0.0。MySQL数据库驱动程序,安装在FlyingHat.Model项目中。
特别说明的是,数据迁移主要依赖的两个包是Microsoft.EntityFrameworkCore.Tools和Microsoft.EntityFrameworkCore.Design。因为Microsoft.EntityFrameworkCore.Tools依赖Microsoft.EntityFrameworkCore.Design,因此在安装Microsoft.EntityFrameworkCore.Tools时,Microsoft.EntityFrameworkCore.Design也会被同时安装,不必再重复安装。
项目依赖关系管理: 由于我们使用的是VS 2022和.Net6,项目依赖关系在Visual Studio中已经做了很好的关联管理。不必每个依赖项都单独引用,只要引用的项目也引用了其他项目即可。
在FlyingHat.Web项目中,打开appsettings.json配置文件以设置数据库连接字符串。接着,在FlyingHat.Extensions项目中创建ServiceExtensions文件夹,并在其中创建DataBaseService.cs类。然后,打开FlyingHat.Web项目中的Program.cs类,将数据库服务注册到Service中。将FlyingHat.Web设置为启动项,并采用CodeFirst方式生成数据库。