首页 > 数据库 >数据库设计心得

数据库设计心得

时间:2024-11-08 08:46:19浏览次数:1  
标签:default 数据库 int user key 设计 null 心得 id

数据库设计心得:基于云端协同的校园配送机器人可视化系统

在当今数字化时代,数据库设计已成为软件开发中不可或缺的一环。最近,我有幸参与了一个基于云端协同的校园配送机器人可视化系统的数据库设计项目。这个项目不仅让我深入了解了数据库设计的复杂性和挑战,也让我体会到了设计一个高效、可扩展数据库系统的乐趣。以下是我在这次项目中的一些心得体会。

1. 明确需求与背景

在开始设计之前,我们首先明确了项目的需求和背景。随着校园内外卖和快递需求的增长,传统的取件方式已经无法满足日益增长的需求,导致取件点拥堵和用户时间安排的不便。因此,我们的目标是设计一个能够优化校园包裹和外卖配送体验的系统,通过配送机器人和相关管理系统,实现自动化配送,减少用户等待时间,提高配送效率。

2. 选择合适的数据库软件

我们选择了MySQL作为数据库软件,因为它具有高性能、高可靠性和易用性,且拥有广泛的社区支持。MySQL的这些特性使得它成为处理大量数据和高并发请求的理想选择。

在设计数据库之前,我们进行了详细的规划。这包括确定数据库的命名约定、设计约定和关联关系。我们决定使用Navicat作为数据库设计工具,因为它支持面向对象的设计方法,可以将对象实体持久化到数据库中,使得系统设计和数据库设计能够有机结合。

3. 表结构设计

我们的数据库设计包括了17个主要的表,每个表都有其特定的功能和结构。例如,admins表用于存储管理员信息,cabinets表用于管理货柜状态,orders表记录订单详情,而robots表则存储有关配送机器人的信息。每个表都包含了必要的字段,如主键、外键和索引,以确保数据的完整性和查询效率。

在设计过程中,我们特别注意外键的使用,以确保数据的完整性和一致性。例如,cabinets表中的site_id字段是外键,引用了sites表的site_id,这样的设计可以保证货柜与站点之间的关联关系是一致的。同时,我们也设置了级联更新和删除规则,以自动处理相关数据的变更。

为了提高查询性能,我们在多个表上创建了索引,如cabinets表的site_id索引和orders表的user_id索引。索引不仅可以加快查询速度,还可以提高数据插入和更新的效率。

在选择数据类型和约束时,我们力求精确和合理。例如,orders表中的total_amount字段使用了decimal类型,以确保金额的精确计算。同时,我们为每个字段设置了合适的约束,如非空约束、唯一约束和默认值,以确保数据的准确性和有效性。

在许多表中,我们使用了timestamp字段来记录数据的创建时间和更新时间,如created_atupdated_at字段。这不仅有助于追踪数据的变更历史,还可以用于数据恢复和审计。

在设计过程中,我们也考虑到了数据库的安全性。例如,admins表中的password字段存储了加密后的密码,以保护管理员的登录信息。此外,我们还设置了访问控制,以限制对敏感数据的访问。

4. 可扩展性与维护性

在设计数据库时,我们考虑到了系统的可扩展性和维护性。我们的设计允许在未来添加新的功能和数据类型,而不需要对现有结构进行大规模的修改。同时,我们也确保了数据库的维护操作简单,如通过自动化的备份和恢复机制。

5. 文档与沟通

在整个设计过程中,文档的编写和团队沟通至关重要。我们定期更新数据库设计文档,并与开发团队、测试团队和维护团队进行沟通,以确保每个人都对数据库设计有清晰的理解。

6. 总结

通过这次项目,我深刻体会到数据库设计不仅仅是技术工作,更是一种艺术。它要求我们既要有扎实的技术基础,又要有前瞻性的思维。一个好的数据库设计可以大大提高系统的效率和可维护性,为项目的长期成功打下坚实的基础。随着技术的不断发展,我相信数据库设计将继续在软件开发中扮演着核心角色。

-- auto-generated definition
create table admins
(
    admin_id int auto_increment
        primary key,
    username varchar(255) not null,
    password varchar(255) not null,
    email varchar(255) null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    constraint unique_admin_email unique (email),
    constraint unique_admin_username unique (username)
)
row_format = DYNAMIC;

-- auto-generated definition
create table cabinets
(
    cabinet_id varchar(10) not null,
    site_id int not null,
    package_id varchar(255) null,
    status enum ('available', 'occupied', 'maintenance', 'timeout') default 'available' not null,
    in_time timestamp default CURRENT_TIMESTAMP null,
    size varchar(50) null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    primary key (cabinet_id, site_id),
    constraint cabinets_ibfk_1 foreign key (site_id) references sites (site_id),
    constraint cabinets_ibfk_2 foreign key (package_id) references packages (package_id) on update cascade on delete set null
)
row_format = DYNAMIC;

create index site_id on cabinets (site_id);

-- auto-generated definition
create table marketing_activities
(
    activity_id int auto_increment
        primary key,
    activity_name varchar(255) not null,
    description text null,
    image_data longtext null,
    start_time timestamp not null,
    end_time timestamp not null,
    status enum ('进行中', '已结束', '未开始') default '未开始' not null
)
row_format = DYNAMIC;

-- auto-generated definition
create table orders
(
    order_id varchar(255) not null
        primary key,
    user_id int not null,
    robot_id int null,
    site_id int not null,
    package_id varchar(255) null,
    status enum ('待发货', '正在运输', '已完成', '已取消') default '待发货' not null,
    delivery_address varchar(255) null,
    delivery_starttime datetime null on update CURRENT_TIMESTAMP,
    estimated_completion_time timestamp null,
    total_amount decimal(10, 2) not null,
    discount_type enum ('无', '优惠券', '折扣') default '无' not null,
    discount_value decimal(10, 2) default 0.00 null,
    completed_at timestamp default CURRENT_TIMESTAMP null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    payment_method varchar(50) null,
    constraint orders_ibfk_1 foreign key (user_id) references users (user_id),
    constraint orders_ibfk_2 foreign key (site_id) references sites (site_id),
    constraint pacid foreign key (package_id) references packages (package_id) on update cascade on delete set null,
    constraint robotid foreign key (robot_id) references robots (robot_id) on update cascade on delete set null
)
row_format = DYNAMIC;

create index site_id on orders (site_id);

create index user_id on orders (user_id);

-- auto-generated definition
create table packages
(
    package_id varchar(255) not null
        primary key,
    user_phone varchar(15) not null,
    status enum ('待取件', '运输中', '已签收') default '待取件' not null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    type enum ('外卖', '快递', '鲜花', '蛋糕', '其他') default '其他' not null,
    site_id int not null,
    other_phone varchar(15) null,
    cabinet_id varchar(10) null,
    constraint packages_cabinets_cabinet_id_fk foreign key (cabinet_id) references cabinets (cabinet_id),
    constraint site_id foreign key (site_id) references sites (site_id)
)
row_format = DYNAMIC;

-- auto-generated definition
create table recharge_promotions
(
    promotion_id int auto_increment
        primary key,
    recharge_amount decimal(10, 2) not null,
    bonus_amount decimal(10, 2) not null,
    status enum ('进行中', '已结束') default '进行中' not null
)
row_format = DYNAMIC;

-- auto-generated definition
create table robot_repair_records
(
    repair_id int auto_increment
        primary key,
    robot_id int not null,
    repair_date timestamp default CURRENT_TIMESTAMP null,
    repair_sparepart_id int not null,
    cost decimal(10, 2) null,
    constraint robot_repair_records_ibfk_1 foreign key (robot_id) references robots (robot_id),
    constraint sparepart_id_1 foreign key (repair_sparepart_id) references spareparts (part_id) on update cascade
)
row_format = DYNAMIC;

create index robot_id on robot_repair_records (robot_id);

-- auto-generated definition
create table robots
(
    robot_id int auto_increment
        primary key,
    site_id int not null,
    current_status enum ('idle', 'busy', 'maintenance') default 'idle' not null,
    delivery_order_count int default 0 null,
    battery_capacity int null,
    latitude decimal(9, 6) null,
    longitude decimal(9, 6) null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    constraint robots_ibfk_1 foreign key (site_id) references sites (site_id)
)
row_format = DYNAMIC;


create index site_id on robots (site_id);

create table sites
(
    site_id int auto_increment primary key,
    site_name varchar(255) not null,
    location varchar(255) null,
    cabinet_count int default 0 null,
    robot_count int default 0 null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    latitude decimal(9, 6) null,
    longitude decimal(9, 6) null
) row_format = DYNAMIC;

create table spareparts
(
    part_id int auto_increment primary key,
    part_name varchar(255) not null,
    quantity int default 0 null,
    unit varchar(50) default '个' null,
    supplier varchar(255) null,
    in_time timestamp default CURRENT_TIMESTAMP null,
    status enum ('可用', '损坏') default '可用' not null
) row_format = DYNAMIC;

create table system_messages
(
    message_id int auto_increment primary key,
    content text not null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    status enum ('未读', '已读') default '未读' not null,
    admin_id int null,
    constraint system_messages_admins_admin_id_fk foreign key (admin_id) references admins (admin_id)
) row_format = DYNAMIC;

create table transaction_records
(
    transaction_id int auto_increment primary key,
    description varchar(255) null,
    transaction_type enum ('支入', '支出') not null,
    amount decimal(10, 2) not null,
    transaction_time timestamp default CURRENT_TIMESTAMP null,
    counterparty_type varchar(50) null,
    order_id varchar(255) null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    constraint `order` foreign key (order_id) references orders (order_id)
) row_format = DYNAMIC;

create table user_addresses
(
    address_id int auto_increment primary key,
    user_id int not null,
    recipient_name varchar(255) not null,
    phone varchar(15) not null,
    building varchar(255) not null,
    region varchar(255) not null,
    is_default tinyint(1) default 0 null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    constraint user_addresses_ibfk_1 foreign key (user_id) references users (user_id)
) row_format = DYNAMIC;

create index user_id on user_addresses (user_id);

create table user_avatars
(
    user_id int auto_increment primary key,
    avatar_data longtext not null,
    uploaded_at timestamp default CURRENT_TIMESTAMP null,
    constraint user_avatars_ibfk_1 foreign key (user_id) references users (user_id)
) row_format = DYNAMIC;

create table user_coupons
(
    coupon_id int auto_increment primary key,
    user_id int not null,
    coupon_type enum ('折扣券', '代金券') not null,
    discount_value decimal(10, 2) not null,
    start_date timestamp null,
    end_date timestamp null,
    status enum ('未使用', '已使用', '过期') default '未使用' not null,
    constraint user_coupons_ibfk_1 foreign key (user_id) references users (user_id)
) row_format = DYNAMIC;

create index user_id on user_coupons (user_id);

create table user_messages
(
    message_id int auto_increment primary key,
    user_id int not null,
    content text not null,
    message_type enum ('通知', '提醒', '系统消息') not null,
    is_read tinyint(1) default 0 null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    constraint user_messages_ibfk_1 foreign key (user_id) references users (user_id)
) row_format = DYNAMIC;

create index user_id on user_messages (user_id);

create table user_payments
(
    payment_id int auto_increment primary key,
    user_id int not null,
    order_id varchar(255) null,
    payment_type enum ('支付', '充值') not null,
    amount decimal(10, 2) not null,
    payment_method varchar(50) null,
    payment_time timestamp default CURRENT_TIMESTAMP null,
    status enum ('成功', '失败', '待处理') default '成功' not null,
    constraint user_order foreign key (order_id) references orders (order_id),
    constraint user_payments_ibfk_1 foreign key (user_id) references users (user_id)
) row_format = DYNAMIC;

create index user_id on user_payments (user_id);

create table users
(
    user_id int auto_increment primary key,
    username varchar(255) not null,
    code varchar(255) null,
    phone_number varchar(20) not null,
    balance decimal(10, 2) not null,
    gender enum ('男', '女') null,
    birthday date null,
    online_status enum ('online', 'offline', 'away') default 'offline' not null,
    created_at timestamp default CURRENT_TIMESTAMP null,
    updated_at timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    last_login_time timestamp null,
    last_out_time timestamp null,
    constraint unique_phone_number unique (phone_number),
    constraint unique_username unique (username)
) row_format = DYNAMIC;

标签:default,数据库,int,user,key,设计,null,心得,id
From: https://www.cnblogs.com/Bu661e/p/18534381

相关文章

  • eNSP校园网络毕业设计汇总2-内容任选【实验+文档】
    文章目录校园网1(DSVPN、IPSECVPN、MSTP、双机热备、)校园网2(IPSECVPN、双机热备、专线网络)校园网3(QinQ隧道技术、无线、双机热备)校园网4(DSVPN、MPLSVPN、无线、双机热备)校园网5(SSLVPN、服务器负载分担、双机热备、出口负载分担、运营商双归属、策略路由、无线)校园网1(D......
  • springboot策略设计模式最佳实践
    假设我们希望实现以下需求:支付方式(如支付宝、微信支付)可以动态切换。支付方式配置从配置文件中加载,或者支持在数据库中动态更新。配置文件或数据库中指定当前生效的支付方式。步骤1:配置文件定义支付方式我们可以在application.yml或application.properties中定义支......
  • php毕业设计流浪动物领养系统宠物领养网站PHP+MySQL+HTML计算机毕业设计PHP源码获取ph
    一、功能介绍基于php+mysql+html前台:网站首页宠物推荐最新宠物新闻咨询宠物分类宠物资讯评论登录/注册加入购物车、领养、个人中心后台:各种增删改查系统设置分类管理宠物管理领养管理评价管理新闻资讯用户管理二、效果展示三、代码展示CREATE......
  • Windows下Cassandra数据库安装及编程访问
    前提紧要:由于我的Java版本是Java8所以为了兼容,我选择了apache-cassandra-3.11.11官网下载链接:https://www.apache.org/dyn/closer.lua/cassandra/3.11.11/apache-cassandra-3.11.11-bin.tar.gz通常推荐使用Java8来运行Cassandra3.x版本,因为它的性能和稳定性在这一组合下得......
  • 阅文批示与资产管理系统数据库设计详解
    阅文批示与资产管理系统数据库设计详解项目背景:为了提升文件处理及资产管理的效率,该系统设计了完善的数据库结构,以满足不同角色的需求。通过记录文件的审批、传阅、资产交易等过程,实现了文件和资产的全生命周期管理。数据库表结构概述系统数据库包含用户、文件、资产、通知等多......
  • 数据库系统------存储和索引
    索引索引的作用引入索引是为了加快数据的访问,就像查字典一样,我们根据拼音或者偏旁查找具体的字会更快索引项搜索键:用于查找记录的属性或属性集合指针:指向与搜索键值匹配的一个或多个记录索引文件索引文件是由一系列索引项组成的,索引文件通常比数据文件小索引的基本......
  • 数据库SQL Server语言 练习题合集
    文章目录一、“小学生”题库二、“硕士”题库三、“博士”题库四、“博士后”题库五、“博导”题库六、“校长”题库七、“院士”题库总结1.**多表联接查询**:2.**嵌套查询(子查询)**:3.**去重与计数**:4.**条件筛选与分组**:5.**比较与计算**:6.**实际应用**:总结:一......
  • 基于STM32的智能停车场管理系统设计
    引言本项目旨在基于STM32微控制器设计一个智能停车场管理系统。该系统集成了多种传感器和控制模块,以实现停车位实时检测、车辆识别、自动控制栏杆、车位信息显示和云端数据管理等功能。智能停车场管理系统可以有效提升停车场的运转效率,改善车主的停车体验,减少人工管理成本,并且......
  • 基于STM32的智能晾衣架系统设计
    引言本项目基于STM32微控制器设计了一个智能晾衣架系统,通过集成多个传感器模块和电机控制系统,实现自动化的晾晒和收衣功能。该系统能够根据天气状况自动调节晾衣架的伸展与收缩,以确保衣物在最佳条件下进行晾晒。项目涉及硬件设计、传感器数据处理和电机控制算法的实现,适用于家......
  • SpringBoot校园二手书籍信息平台w5mzh--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究目的与意义随着高校教育的普及,书籍成为大学生日常学习不可或缺的资源。然而,书籍的高消耗量和频繁更新导致了资源的浪费。因此,构建一个校园......