Q:以最简单的表结构设计出符合需求的组织架构?
A:组织架构通常是树形结构,上级包含下级所有权限。因此表结构可以如下设计:
+----+------+--------+
| ID | NAME | parent |
+----+------+--------+
其中parent为外键列,引用指向当前表ID,同时约束CHECK(ID <> parent) 来确保数据的有效性。
Q:是否可以仅通过一条SQL获取指定ID的所有子集列表?
A:不能。一条SQL只能在数据库执行一次,SQL仅具备常规逻辑(与[and], 或[or, in, not in], 非[is null, is not null])能力不具备如循环、递归等能力,所以不能直接通过一条SQL语句获取到所有需要的数据;因此要获取子集列表只能通过程序控制;
Q:如何获取子集列表?
A:可以有两种选择:
1、使用数据库支持的存储过程(Procedure);
2、使用编程语言(如:Java,C#,PHP等,该文以Java为例)循环实现;
对比:
+----+--------+----------------+
| | Procedure | PL(Programming Languages) |
+----+--------+----------------+
| 优点 | 减少SQL传输 | 语言性能更强,更容易控制 |
+----+--------+----------------+
| 缺点 | 增加DB响应时间 | 层次深、节点多时,SQL发 |
| | | 送次数不确定 |
+----+--------+----------------+
递归层次3层以下且分支在2条左右可以使用PL实现,在此作者推荐Procedure方式实现;
Q:如何避免在树架构中出现图架构(回环)?
A: 关于这个问题,作者和同事在初时也是头疼不已;如何规避树结构夹杂图结构主要由以下两方面入手:
第一、数据插入前,递归(循环) 验证目标节点(TN--Target Node)未出现在准父级( FTB--Father-To-Be)的父节点列表中;从 TN->FTB 是不好查询的,而反过来则要容易得多:FBT->TN;
第二、为防止DB(数据库) 被通过非法途径污染架构树,在获取子集时也需要做验证(FBT->TN);
*第三、设置插入触发器(IT--Insert Trigger),更新触发器(UT--Update Trigger),在触发器中验证 FBT->TN合法性;
第四、经研究讨论后,发现一种更有效的方式避免在树结构中出现图结构:
为树结构中的每个节点定义层级概念!
+----+------+--------+-------+
| ID | NAME | parent | Level |
+----+------+--------+-------+
| 1 | name1| null | null |
+----+------+--------+-------+
| 2 | name2| 1 | 2 |
+----+------+--------+-------+
| 3 | name3| 1 | 2 |
+----+------+--------+-------+
| 4 | name4| null | null |
+----+------+--------+-------+
| 5 | name5| 3 | 3 |
+----+------+--------+-------+
需求:1、将ID(3)父节点修改为ID(2). a:获取ID(2)层级值(L2)
b:获取ID(3)层级值(L3)
c:验证ID(3)与ID(2)层级关系,被移动节点不能高于目标节点(L3>L2)
d:获取L3需被提升的层次:DV=L3-L2-1 (DV--Difference Value)
e:修改以ID(3)为根的所有子节点(包括ID(3))层次都提升
2、将ID(4)父节点分配为ID(3).
a:获取ID(3) 层级值(L3)
b:将L4修改为L3+1后完成操作
3、将ID(5)父节点修改为ID(4).
a:获取ID(4)层级值L4
b:获取ID(5)层级值L5
c:ID(5)不是根节点(L5<>1),设置L4=L5-1
d:ID(5)是根节点,设置L4=1同时修改以ID(5)为根的所有子节点(包括ID(5))层次都降低1
分享到:
相关推荐
在实际应用中,通常会将当前图像与已存储在数据库中的图像进行比较,以寻找潜在的回环。通过设置阈值,例如当前帧与之前关键帧的相似度超过一定比例,可以判断是否存在回环。 回环检测后的验证通常包括时间一致性...
- 对于外部回环,连接器必须正确安装,以避免损坏设备。 - 分析测试结果时,要关注错误帧和位错误率,这些都是评估CAN系统性能的关键指标。 总的来说,CAN回环测试是保证CAN通信系统稳定运行的重要环节,通过神舟王...
2. **故障排除**:当网络出现问题时,可以通过回环网来判断是应用程序的问题还是网络基础设施的问题。 3. **软件开发**:在软件开发过程中,开发者可以利用回环网来进行独立的单元测试或集成测试。 4. **安全性测试*...
8. **异常处理**:在整个过程中,应处理可能出现的异常,如权限未授予、录音设备不可用等。 从压缩包中的文件名`SubMICPhoneTest`来看,这可能是测试程序的主类或测试用例,包含了上述步骤的实现。在实际项目中,...
在实际工程应用中,通过分析滞回环的总面积,工程师能够评估在特定荷载作用下材料或结构能够吸收并耗散的能量,这对于预测结构的抗震性能和耐久性至关重要。例如,高能量耗散材料或构件能有效吸收地震能量,降低结构...
7. **优化建议**:在进行SPI回环测试时,应确保所有SPI信号的电平转换正确,避免信号反射和噪声干扰。同时,为了防止潜在的电源噪声影响,最好在纯净的电源环境下进行测试。 总的来说,SPI回环测试是验证SPI接口...
回环字符串,也称为环状字符串或循环字符串,是指可以通过将字符串的一部分移动到字符串的开头,使得整个字符串形成一个环状结构的字符串。在给定的代码中,我们有两个主要的函数`isok()`和两个辅助函数`addhead()`...
在Windows操作系统中,创建回环设备(Loopback Device)是一种常见的技术操作,它主要用于测试网络应用程序或服务,而无需实际的网络连接。回环设备在系统中表现为一个虚拟的网络接口,可以模拟网络数据包的发送和...
STM32 CAN(控制器局域网)是一种广泛应用的通信协议,尤其在嵌入式系统中,用于设备间的高效、可靠的数据传输。...在开发阶段进行这样的测试,能有效避免在实际应用中出现的潜在问题,提高产品的质量和可靠性。
在回环测试中,开发板会发送特定的数据帧(例如0xAB和0xCD),并通过CAN总线接收这些数据帧。由于是回环测试,不需要外接导线,仅用一块开发板即可完成测试。 为了实现回环测试,必须设置好STM32的GPIO引脚,使得...
4. 在编程中建立连接时,应使用本机的IP地址(如上述例子中的***.***.*.***),而不是使用本地回环地址(***.*.*.*)。例如,在一个socket连接中,使用`socket.Connect("***.***.*.***",4530);`来替代`socket....
总结来说,STM32的CAN回环程序是一个用于测试和验证CAN通信功能的工具,通过内部回环,简化了对CAN接口功能的验证,避免了外部硬件的复杂设置。在理解和实现这样一个程序时,需要对STM32的HAL库以及CAN协议有一定的...
回环网络是一种特殊的虚拟网络连接方式,主要用于测试网络软件或进行网络调试时,让数据包在本机内部循环而不发送到物理网络中。这种方式可以有效地帮助开发人员和系统管理员在没有实际网络连接的情况下进行测试与...
STM32-HAL-CAN查询式回环模式实现收发数据是嵌入式开发中的一个关键环节,尤其在工业控制、汽车电子等应用领域。STM32是意法半导体(STMicroelectronics)推出的基于ARM Cortex-M内核的微控制器系列,而CAN...
1、什么是本地回环 2、开启本地回环访问权限 3、删除本地回环访问权限 4、查看可以拥有访问本地回环代理的应用列表 5、获取 UWP 应用的 SID 或者 Pa
在Windows CE环境下,实现音频回环涉及到音频输入与输出设备的交互、缓冲区管理以及多线程编程。本文将深入探讨这些关键知识点。 首先,音频回环(Loopback)是一种技术,它允许音频数据从输入设备捕获后,直接...
摘要:本文主要探讨了移动机器人在进行定位和建图过程中出现的位姿漂移问题。在机器人利用视觉传感器进行移动时,通过分析相邻两帧图片来计算位姿变化,这种计算方式导致随着时间的推移和图片帧数的增加,机器人的...
4. 检查接收:在回环模式下,发送的数据应立即在接收邮箱中出现,验证数据的完整性和一致性。 5. 关闭回环模式:测试完成后,应恢复到正常操作模式,以便在实际CAN网络中使用。 此外,实验可能还会涉及到使用开发...
根据给定文件的信息,我们可以分析出这是一个C++程序,它主要实现了三种不同的矩阵填充方法:回环矩阵(check_matrix_round)、蛇形矩阵(check_matrix_snake)以及逆序矩阵(check_matrix_reverse)。接下来,我们...
这样,如果数据在传输过程中出现错误或丢失,可以通过比较发送和接收的数据来检测问题所在。在STM32中进行串口回环测试,通常包括以下步骤: 1. 初始化串口:首先,需要配置STM32的串口参数,包括波特率、数据位、...