数据库表设计五层分类系统表设计

news/2025/4/22 1:30:11

文章目录

  • 数据库表设计五层分类系统表设计
    • 代码思路详解
    • 类概述
    • 核心方法详解
      • 1. `processString(String input)` 方法
      • 2. `createNo(String input, boolean peerNode)` 方法
      • 3. `isParent(String parentNo, String sonNo)` 方法
    • 编号系统设计
    • 使用场景推测
    • 代码特点
    • 可能的使用示例
  • `NoProcessing.processString(n.getCategoryNo()).length()/3-1` 详细解析
    • 代码分解
    • 类概述
    • 核心方法详解
      • 1. `processString(String input)` 方法
      • 2. `createNo(String input, boolean peerNode)` 方法
      • 3. `isParent(String parentNo, String sonNo)` 方法
    • 编号系统设计
    • 使用场景推测
    • 代码特点

数据库表设计五层分类系统表设计

首先表中有一个15位的编号如下:

层级索引示例编号处理后长度计算过程结果
1010000000000000033/3-1=00
2110000100000000066/3-1=11
3210000100100000099/3-1=22
431000010010010001212/3-1=33
541000010010010011515/3-1=44

处理工具类:


/*** @ClassName NoProcessing.java* @Description 编号创建类*/
public class NoProcessing {public static void main(String[] args) {
//        String input = "100001009001001";
//        String processedString = createNo(input,true);
//        System.out.println(processedString);String sonNo = "100001001001000";String parentNo = "100001001000000";System.out.println(isParent(parentNo,sonNo));}/**** @description 处理补全编号,所有编号都是15位,共5层,每层关系如下:* 第一层:100000000000000* 第二层:100001000000000* 第三层:100001001000000* 第四层:100001001001000* 第五层:100001001001001* 处理后100000000000000后结果为100* @param input* @return: java.lang.String*/public static String processString(String input) {int step = input.length() / 3;for (int i =0;i<step;i++ ){String targetString = input.substring(input.length()-3,input.length());if ("000".equals(targetString)){input = input.substring(0,input.length()-3);}else {break;}}return input;}/**** @description 生产层级编号* @param input 输入编号* @param peerNode 是否有下属节点* @return* @return: java.lang.String*/public static String createNo(String input,boolean peerNode) {int step = input.length() / 3;int supplement = 0;for (int i =0;i<step;i++ ){String targetString = input.substring(input.length()-3,input.length());if ("000".equals(targetString)){input = input.substring(0,input.length()-3);supplement++;}else {break;}}if (peerNode){input = String.valueOf(Long.valueOf(input) + 1L);for (int i =0;i<supplement;i++ ){input = input+"000";}}else {input = String.valueOf(Long.valueOf(input+"001"));for (int i =0;i<supplement-1;i++ ){input = input+"000";}}return input;}/**** @description 是否是其子类** @param parentNo 父编号* @param sonNo 子编号* @return* @return: java.lang.Boolean*/public static Boolean isParent(String parentNo,String sonNo) {parentNo = processString(parentNo);return sonNo.startsWith(parentNo);}}

代码思路详解

这个类是一个编号处理工具类,主要用于处理15位长度的层级编号系统。下面我将详细解析每个方法和类的整体功能。

类概述

NoProcessing 类提供以下主要功能:

  1. 处理层级编号字符串

  2. 创建新的层级编号

  3. 判断父子编号关系

核心方法详解

1. processString(String input) 方法

功能:去除编号末尾连续的"000"部分,提取有效编号。

处理逻辑

  1. 计算编号的步长(总长度/3)

    • 因为编号是15位,每层用3位表示,所以step=5
  2. 从末尾开始检查每3位一组:

    • 如果是"000"则去除

    • 遇到非"000"则停止

  3. 返回处理后的字符串

示例

java

复制

输入 “100001001000000” → 处理过程:

  1. 检查最后3位"000" → 去除 → “100001001000”
  2. 检查新的最后3位"000" → 去除 → “100001001”
  3. 检查"001" → 不是"000" → 停止
    返回 “100001001”

使用场景:获取编号的有效部分,去除末尾的占位"000"

2. createNo(String input, boolean peerNode) 方法

功能:根据现有编号创建新的层级编号。

参数

  • input:基础编号

  • peerNode:是否创建同级节点(true)还是子级节点(false)

处理逻辑

  1. 先像processString一样去除末尾的"000"

  2. 根据peerNode参数决定如何生成新编号:

    • 同级节点(peerNode=true):当前数字+1,然后补回去除的"000"

    • 子级节点(peerNode=false):当前数字末尾+“001”,然后补回(去除的"000"数量-1)

示例

java

复制

// 创建同级节点
createNo(“100001001000000”, true) →

  1. 处理得到"100001001"
  2. 100001001 + 1 = 100001002
  3. 补回2组"000" → “100001002000000”

// 创建子级节点
createNo(“100001001000000”, false) →

  1. 处理得到"100001001"
  2. 添加"001" → “100001001001”
  3. 补回1组"000" → “100001001001000”

3. isParent(String parentNo, String sonNo) 方法

功能:判断一个编号是否是另一个编号的父级。

处理逻辑

  1. 先处理父编号去除末尾"000"

  2. 检查子编号是否以处理后的父编号开头

示例

java

复制

isParent(“100001000000000”, “100001001000000”) →

  1. 处理父编号 → “100001”
  2. 检查子编号是否以"100001"开头 → true

编号系统设计

从代码可以看出这是一个5层15位的编号系统:

  • 每层用3位数字表示

  • 层级关系通过数字前缀表示

  • "000"表示该层级无具体值

编号示例

复制

第一层:100000000000000 → “100”…
第二层:100001000000000 → “100”+“001”…
第三层:100001001000000 → “100”+“001”+“001”…
第四层:100001001001000 → “100”+“001”+“001”+“001”…
第五层:100001001001001 → “100”+“001”+“001”+“001”+“001”

使用场景推测

这类编号系统常用于:

  • 商品分类体系

  • 组织架构编码

  • 地区编码

  • 任何需要多层级表示的编码系统

代码特点

  1. 防御性处理:方法都考虑了字符串操作的安全问题

  2. 数值处理:使用Long处理大数字

  3. 层级清晰:严格的3位一组表示层级

  4. 灵活性:支持同级和子级节点创建

可能的使用示例

java

复制

// 1. 处理现有编号
String processed = NoProcessing.processString(“100001001000000”); // 返回"100001001"

// 2. 创建子分类编号
String newChild = NoProcessing.createNo(“100001000000000”, false); // 返回"100001001000000"

// 3. 检查分类关系
boolean isParent = NoProcessing.isParent(“100000000000000”, “100001000000000”); // 返回true

这个工具类为层级编号系统提供了完整的创建、处理和验证功能。

NoProcessing.processString(n.getCategoryNo()).length()/3-1))

修改

NoProcessing.processString(n.getCategoryNo()).length()/3-1 详细解析

这段代码是用来计算分类编号的层级深度,下面我将详细解释它的每个部分和整体功能。

代码分解

这个类是一个编号处理工具类,主要用于处理15位长度的层级编号系统。下面我将详细解析每个方法和类的整体功能。

类概述

NoProcessing 类提供以下主要功能:

  1. 处理层级编号字符串

  2. 创建新的层级编号

  3. 判断父子编号关系

核心方法详解

1. processString(String input) 方法

功能:去除编号末尾连续的"000"部分,提取有效编号。

处理逻辑

  1. 计算编号的步长(总长度/3)

    • 因为编号是15位,每层用3位表示,所以step=5
  2. 从末尾开始检查每3位一组:

    • 如果是"000"则去除

    • 遇到非"000"则停止

  3. 返回处理后的字符串

示例

java

复制

输入 “100001001000000” → 处理过程:

  1. 检查最后3位"000" → 去除 → “100001001000”
  2. 检查新的最后3位"000" → 去除 → “100001001”
  3. 检查"001" → 不是"000" → 停止
    返回 “100001001”

使用场景:获取编号的有效部分,去除末尾的占位"000"

2. createNo(String input, boolean peerNode) 方法

功能:根据现有编号创建新的层级编号。

参数

  • input:基础编号

  • peerNode:是否创建同级节点(true)还是子级节点(false)

处理逻辑

  1. 先像processString一样去除末尾的"000"

  2. 根据peerNode参数决定如何生成新编号:

    • 同级节点(peerNode=true):当前数字+1,然后补回去除的"000"

    • 子级节点(peerNode=false):当前数字末尾+“001”,然后补回(去除的"000"数量-1)

示例

java

复制

// 创建同级节点
createNo(“100001001000000”, true) →

  1. 处理得到"100001001"
  2. 100001001 + 1 = 100001002
  3. 补回2组"000" → “100001002000000”

// 创建子级节点
createNo(“100001001000000”, false) →

  1. 处理得到"100001001"
  2. 添加"001" → “100001001001”
  3. 补回1组"000" → “100001001001000”

3. isParent(String parentNo, String sonNo) 方法

功能:判断一个编号是否是另一个编号的父级。

处理逻辑

  1. 先处理父编号去除末尾"000"

  2. 检查子编号是否以处理后的父编号开头

示例

java

复制

isParent(“100001000000000”, “100001001000000”) →

  1. 处理父编号 → “100001”
  2. 检查子编号是否以"100001"开头 → true

编号系统设计

从代码可以看出这是一个5层15位的编号系统:

  • 每层用3位数字表示

  • 层级关系通过数字前缀表示

  • "000"表示该层级无具体值

编号示例

复制

第一层:100000000000000 → “100”…
第二层:100001000000000 → “100”+“001”…
第三层:100001001000000 → “100”+“001”+“001”…
第四层:100001001001000 → “100”+“001”+“001”+“001”…
第五层:100001001001001 → “100”+“001”+“001”+“001”+“001”

使用场景推测

这类编号系统常用于:

  • 商品分类体系

  • 组织架构编码

  • 地区编码

  • 任何需要多层级表示的编码系统

代码特点

  1. 防御性处理:方法都考虑了字符串操作的安全问题

  2. 数值处理:使用Long处理大数字

  3. 层级清晰:严格的3位一组表示层级

  4. 灵活性:支持同级和子级节点创建


https://dhexx.cn/news/show-5497594.html

相关文章

hackmyvm-quick2

收集信息 arp-scan -l nmap 192.168.66.74 dirsearch -u http://192.168.66.74 -e * 访问file.php 尝试查看/etc/passwd 抓包 payload: /file.php?file=/home/andrew/.bashrc /file.php?file=/home/nick/.bashrc

测试基础笔记第四天(html)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 html介绍1. 介绍2.骨架标签3.常用标签标题标签段落标签超链接标签图片标签换行和空格标签布局标签input标签&#xff08;变形金刚&#xff09;form标签列表标签 htm…

代码随想录第18天:二叉树

一、修剪二叉树&#xff08;Leetcode 669&#xff09; 递归法 class Solution:def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:# 如果当前节点为空&#xff0c;直接返回空节点&#xff08;递归终止条件&#xff09;if root is None:return None# 如果…

[Java实战经验]链式编程与Builder模式

目录 链式编程Builder模式 链式编程 链式编程&#xff08;Fluent AP&#xff09;是一种编程风格&#xff0c;它通过在同一个对象上连续调用多个方法来执行一系列操作&#xff08;让方法返回对象本身&#xff08;return this&#xff09;&#xff09;。这种风格的编程使代码更加…

多模态大模型文字识别 vs OCR识别模型

论文简述 多模态大语言模型(Multimodal Large Language Models,简称多模态LLMs)具有高度通用性,能够处理图像描述、文档分析和自动化内容生成等多种任务。这种广泛的适用性使其在不同工业领域都受到了大量关注。 在OCR方面,多模态LLMs的表现超过了专门为OCR设计的模型。这…

Qt/C++学习系列之QTreeWidget的简单使用记录

Qt/C学习系列之QTreeWidget的简单使用记录 前言1布局1.1布局要求1.2布局代码 2代码设计2.1整体勾选2.2勾选项确认 总结 前言 自己练手的项目中&#xff0c;需要对多个不同层级的选项进行勾选操作&#xff0c;而想到简洁点的操作方式就是使用QTreeWidget进行布局与应用。这里简…

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法&#xff1f; 1.1 手动创建 Logger 对象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用频率较低&#xff09; 二. 常见的 Logger&#xff0c;logger&#xff0c;…

C++: Initialization and References to const 初始化和常引用

cpp primer 5e, P97. 理解 这是一段很容易被忽略、 但是又非常重要的内容。 In 2.3.1 (p. 51) we noted that there are two exceptions to the rule that the type of a reference must match the type of the object to which it refers. The first exception is that we …

Vue 人看 React useRef:它不只是替代 ref

如果你是从 Vue 转到 React 的开发者&#xff0c;初见 useRef 可能会想&#xff1a;这不就是 React 版的 ref 吗&#xff1f;但真相是 —— 它能做的&#xff0c;比你想象得多得多。 &#x1f440; Vue 人初见 useRef 在 Vue 中&#xff0c;ref 是我们访问 DOM 或响应式数据的…

(51单片机)LCD显示日期时间时钟(DS1302时钟模块教学)(LCD1602教程)

目录 源代码 main.c LCD1602.c LCD1602.h DS1302.c DS1302.h 代码解析与教程&#xff1a; LCD1602模块 DS1302模块 效果视频&#xff1a; 源代码 如上图将5个文放在Keli5 中即可&#xff0c;然后烧录在单片机中就行了 烧录软件用的是STC-ISP&#xff0c;不知道怎么安装的…