关于分类数据表格的设计

在一个系统设计中经常遇到分类数据表格设计,而且分类层数可能是不确定的。比方说一个商场的产品分类可以如下:

    上图的数据结构就是一个树,数据表格设计有多种方法。每个分类可能在系统运行时需查询、增加、删除、修改、移动。不同的设计可能使各个功能点的性能不同,有些使查询快速和便利,有些新是增快速和便利,有些是删除、修改快和便利。针对上图可以有以下各种设计:

 

 

方案一:( 经常使用)

:Id:类型的唯一标识符;name:类型名称;parentId:父类ID(参照本表id)
查询 :单一查询方便;但查询某分类的全部子类就不方便(需迭代查询 ),不同的数据库有不同的语句,有些数据库还不支持迭代查询。


新增、修改、删除 :新增、修改、删除比较便利(删除某分类时可能得逐级向上删除或者设置CASCADE )

 

方案二:

 

注: Id:类型的唯一标识符;name:类型名称;code:类型编码

查询 :单一查询方便,查询某分类的全部子类也方便(使用 like)
修改 、删除:修改、删除比较便利
新增 :新增还需查询其父类code,然后再加上此类#id(不很便利)

致命缺点 :code长度有限,只支持层数有限的树形结构,树形不大时可以使用此结构

 

方案三:(综合方案二方案一)

 

此方案综合了方案一、二,弥补了方案一的一些缺点但也带进了方案而的缺点

 

最想说的是方案四
先看看下面这个数据结构:

 

表结构:

Left:左支标识 Right:右支标识

这个数据结构的查询需要一定的算法来支持,
查询:单一查询方便

查询分类根节点:

Select * from kind_table where left=1;
 



查询分类(left=pleft, right=pright)所以子类(此处不需迭代查询):

Select * from kind_table where left> pleft and right<pright;
 



修改:
修改一个分类(得连带修改其所有子类),只需遵循一条原则:

where left> pleft and right<pright;
 



新增:

新增一个分类(其父类为id=pid,left=pleft, right=pright)

Update kind_table set right  = right+ 2  where  right >= pright;
Update kind_table set left  =left+2     where  left > pright;
Insert into  kind_table values($id,$name,pid, pright, pright+1);
 



删除:
删除一个分类(id=cid,left=cleft, right=cright)

Delete from kind_table where left>= pleft and right=<pright;
Update kind_table set right  = right-( cright- cleft+1)  where  right > cright;
Update kind_table set left  =left-( cright- cleft+1)     where  left > cleft;
 



一些特殊查询:


查询一个父类 (id=pid,left= pleft, right=pright)的所有子类的个数:---不需查询数据库
所有子类的个数:(Pright- pleft-1)/2


判断一个节点是否为叶子节点 :(Pright- pleft-1)/2 ==0 或者Pright- pleft==1


缺点:较复杂的算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个处理csv表格分类器的设计: 1. 数据预处理:读入csv文件并将其转换为数据帧。数据帧是一个二维表格,其中每一行示一个数据样本,每一列示一个特征。 2. 特征选择:通过探索数据集中的每个特征的统计数据和相关性来选择最相关的特征,以便在分类器中使用。 3. 特征工程:对选择的特征进行转换和缩放,以便它们可以在分类器中使用。这包括数据清理,处理缺失值和异常值。 4. 模型选择:选择最适合数据集的模型。可以选择线性模型、非线性模型或集成模型等。 5. 模型训练:使用训练数据集训练模型。这包括拟合模型参数并通过交叉验证来选择最佳超参数。 6. 模型评估:使用测试数据集评估模型性能。可以使用准确性、精度、召回率、F1分数等指标来评估分类器。 7. 模型部署:将经过训练和评估的分类器部署到生产环境中,以便对新数据进行分类。 8. 模型维护:对分类器进行定期维护和更新,以确保其性能始终保持在最高水平。 这是一个基本的分类设计框架,可以根据具体的需求进行调整和修改。 ### 回答2: 设计一个处理csv表格分类器可以包括以下步骤: 1. 数据预处理:读取csv表格文件,并对数据进行清洗和预处理。例如,去除无效数据、处理缺失值、处理异常值等。 2. 特征选择和提取:根据具体的分类任务,选择合适的特征进行分类。可以使用特征工程的方法,如统计特征、文本特征、时间序列特征等。可以使用相关性分析、主成分分析等方法进行特征选择和降维。 3. 数据划分:将数据集划分为训练集和测试集。通常采用交叉验证的方法,将数据集划分为K个子集,每次使用K-1个子集作为训练集,剩下的一个子集作为测试集。 4. 模型选择和训练:选择合适的分类模型进行训练。根据具体的问题,可以选择逻辑回归、决策树、支持向量机、朴素贝叶斯、随机森林等分类器。可以使用网格搜索等方法进行参数调优。 5. 模型评估:使用测试集对训练好的分类器进行模型评估。可以使用准确度、精确度、召回率、F1-score等指标进行评估。也可以通过绘制ROC曲线、计算AUC等指标评价分类器的性能。 6. 模型应用:使用训练好的分类器对新样本进行分类预测。根据具体的需求,可以导出预测结果,或将结果保存到新的csv表格中。 可以通过Python编程实现上述步骤。使用pandas库读取和处理csv表格数据,使用scikit-learn库进行特征选择、模型训练和评估。根据实际需求,通过调用相关函数和方法,逐步完成设计分类器。 ### 回答3: 设计一个处理csv表格分类器,首先要明确分类的目标是什么。假设我们的目标是根据表格中的数据将其分为两类:正例和负例。 首先,我们需要加载csv表格数据。可以使用Python中的pandas库来读取csv文件,并将其转换为DataFrame对象。 接下来,我们可以对表格中的数据进行初步的预处理。这包括处理缺失值、处理异常值、对数据进行标准化等。 然后,我们可以选择合适的特征来训练分类器。根据csv表格的内容,我们可以选择其中的某些列作为特征。比如,如果表格中的数据是关于学生的信息,我们可以选择学生的年龄、性别、成绩等作为特征。 接着,我们可以选择一个适合的机器学习算法来训练分类器。常见的机器学习算法有决策树、支持向量机、朴素贝叶斯等。根据数据的特点和分类目标,选择最适合的算法进行训练。 在训练过程中,我们需要将数据集分为训练集和测试集。通过训练集来训练分类器,并通过测试集来评估分类器的性能。 最后,我们可以使用训练好的分类器来对新的csv表格数据进行分类。将新的数据输入分类器,并根据分类器的输出确定其属于哪一类。 综上所述,设计一个处理csv表格分类器包括加载数据数据预处理、特征选择、选择合适的机器学习算法、训练分类器、评估分类器性能和使用分类器对新数据进行分类等步骤。根据具体的需求和数据特点,可以进一步优化和调整设计

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值