计划独立需求及生产版本对应的table

计划独立需求对应的table为PBIM和PBED。

生产版本对应的table 为MKAL和MAKT。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
仓库管理系统数据库设计 姓名:XXX 学号:XXXXXXXX 班级:XXXX 学院:XXXX .21 仓库管理系统数据库设计 1. 需求分析 随着经济的飞速发展,仓库管理变成了各大公司日益重要的内容。仓库管理过程的准 确性和高效性至关重要。影响着公司的经济发展和管理。利用人工管理强大而数据烦琐 的数据库显的效率过于低。利用计算机高效、准确的特点能够很好的满足公司的管理需 要。提高公司各个员工的工作效率和公司的运做效率。利用计算机对仓库数据信息进行 管理具有着手工管理所无法比拟的优点。目前一个现代化的仓库管理系统已经成为仓库 管理不可缺少的管理手段。 主要功能 它包括了仓库信息、货物信息、货主信息、提货人信息、入库信息、出库信息等内容 。在操作上,它集输入、查询、统计和各种处理为一体,信息导入导出可实现信息备份 ,灵活、专业的报表设计,形象、增强的数据处理,完美的信息图形分析,用户可自定 义自开发等功能。 通过对仓库管理工作过程的内容和数据流图分析,设计如下面的数据项和数据结构。 注:单下划线表示主码,双下划线表示外码。 1. 仓库信息(仓库号,仓库容量,货物号) 2. 货物信息(货物号,名称,数量) 3. 货主信息(货主编号,货主姓名,货主电话) 4. 取货人信息(取货人编号,取货人姓名,取货人电话,取货人地址) 5. 入库信息(货物号,仓库号,货主编号,入库时间,入库价格,入库数量) 6. 出库信息(货物号,仓库号,取货人编号,出库数量,出库价格,出库时间) 2. 概念结构设计 根据上面设计规划出的实体,我们对各个实体具体的描述E-R图如下: 仓库实体E-R图 2.3货主实体E-R图 2.5入库信息实体E-R图 3. 逻辑结构设计 E-R图向关系模型的转换 关系模型的逻辑结构是一组关系模式的集合。E- R图则是由实体,实体的属性和实体间的联系三个要素组成。所以将E- R图转换为关系模型实际上就是要将实体,实体的属性和实体间的联系转换为关系模式。 转换原则如下。 1. 实体类型的转换:一个实体型转换成一个关系模式。实体的属性就是关系的属性, 实体的码就是关系的码。 2.联系类型的转换,根据不同的情况做不同的处理。 一个1:1的联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模 式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身 的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对 应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身 的属性。 一个1:N的联系可以转换为一个独立的关系模式,也可以与N端对应的关系模式合 并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属 性均转换为关系的属性,而关系的码为N端实体的码。 一个M:N联系转换为一个关系模式。与该联系相连的各实体的码为各实体码的组合 。 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相 连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组 合。 具有相同码的关系模式可合并。 4. 数据库实施 根据以上的逻辑分析所得到表的关系,我们使用T- SQL语言设计得到数据库和数据表 4.1基本表的创建,建表语句 1.create database WareHouse; use WareHouse; 2.create table HuoZhu( HZnumber char(10) primary key, HZname char(50) not null, phone_number char(16)); 3.create table HuoWu( HWnumber char(10) primary key, HWname char(50) not null, counts char(50) not null ); 4.create table TiHuo( THnumber char(10) primary key, THname char(50) not null, THphone char(10), address char(50) ); 5.create table CangKu( CKnumber char(10) primary key, HWnumber char(10), size int, constraint CK_HW_n foreign key(HWnumber) references HuoWu(HWnumber) ); 6.create table In_WH( HWnumber char(10) not null, CKnumber char(10), THnumber char(10) not
下面是实现代码,包括生成insert语句和对应的单元测试案例: ```java import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class GenerateInsertSql { /** * 传入数据对象列表,生成对应的数据库insert语句 * * @param dataList 数据对象列表 * @return insert语句列表 */ public static List<String> generateInsertSql(List<Object> dataList) { List<String> sqlList = new ArrayList<>(); // insert语句列表 if (dataList == null || dataList.isEmpty()) { return sqlList; } Class<?> clazz = dataList.get(0).getClass(); // 获取数据对象的类 String tableName = getTableName(clazz); // 获取表名 Field[] fields = clazz.getDeclaredFields(); // 获取类的所有字段 StringBuilder fieldBuilder = new StringBuilder(); // 字段拼接 StringBuilder valueBuilder = new StringBuilder(); // 值拼接 for (Field field : fields) { if (field.isAnnotationPresent(javax.persistence.Column.class)) { javax.persistence.Column column = field.getAnnotation(javax.persistence.Column.class); String columnName = column.name(); // 获取字段对应的数据库列名 fieldBuilder.append(columnName).append(","); // 拼接字段 valueBuilder.append("?").append(","); // 拼接占位符 } } fieldBuilder.deleteCharAt(fieldBuilder.length() - 1); // 删除最后一个逗号 valueBuilder.deleteCharAt(valueBuilder.length() - 1); // 删除最后一个逗号 String sqlTemplate = String.format("INSERT INTO %s (%s) VALUES (%s)", tableName, fieldBuilder.toString(), valueBuilder.toString()); // 构建insert语句模板 for (Object data : dataList) { List<Object> paramList = new ArrayList<>(); // 参数列表 for (Field field : fields) { if (field.isAnnotationPresent(javax.persistence.Column.class)) { try { field.setAccessible(true); Object value = field.get(data); // 获取字段的值 paramList.add(value); } catch (IllegalAccessException e) { e.printStackTrace(); } } } String sql = String.format(sqlTemplate, paramList.toArray()); // 构建完整的insert语句 sqlList.add(sql); } return sqlList; } /** * 获取实体类对应的表名 * * @param clazz 实体类 * @return 表名 */ private static String getTableName(Class<?> clazz) { if (clazz.isAnnotationPresent(javax.persistence.Table.class)) { javax.persistence.Table table = clazz.getAnnotation(javax.persistence.Table.class); return table.name(); } return null; } } ``` 下面是单元测试案例: ```java import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; public class GenerateInsertSqlTest { private static final String TABLE_NAME_1 = "table1"; // 表1的表名 private static final String TABLE_NAME_2 = "table2"; // 表2的表名 /** * 测试生成insert语句 */ @Test public void testGenerateInsertSql() { // 构造数据对象列表 List<Object> dataList = new ArrayList<>(); Table1Data data1 = new Table1Data(); data1.setId(1L); data1.setName("name1"); data1.setAge(20); dataList.add(data1); Table2Data data2 = new Table2Data(); data2.setId(2L); data2.setDesc("desc2"); dataList.add(data2); // 生成insert语句 List<String> sqlList = GenerateInsertSql.generateInsertSql(dataList); // 断言生成的insert语句正确 Assertions.assertEquals(2, sqlList.size()); Assertions.assertEquals(String.format("INSERT INTO %s (ID,NAME,AGE) VALUES (?,?,?)", TABLE_NAME_1), sqlList.get(0)); Assertions.assertEquals(String.format("INSERT INTO %s (ID,DESCRIPTION) VALUES (?,?)", TABLE_NAME_2), sqlList.get(1)); } /** * 表1的实体类 */ @javax.persistence.Entity @javax.persistence.Table(name = TABLE_NAME_1) private static class Table1Data { @javax.persistence.Id private Long id; @javax.persistence.Column(name = "NAME") private String name; @javax.persistence.Column(name = "AGE") private int age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } /** * 表2的实体类 */ @javax.persistence.Entity @javax.persistence.Table(name = TABLE_NAME_2) private static class Table2Data { @javax.persistence.Id private Long id; @javax.persistence.Column(name = "DESCRIPTION") private String desc; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值