SQL中的分层标记
发布时间:2020-12-12 06:51:50 所属栏目:MsSql教程 来源:网络整理
导读:我有一个PHP Web应用程序,它使用MySQL数据库进行对象标记,其中我使用了标记结构作为 this SO question的答案. 我想实现一个标记层次结构,其中每个标记都可以有一个唯一的父标记.然后搜索父标签T将匹配T的所有后代(即T,父母为T的标签(T的子女),T的孙子等). 最
我有一个PHP Web应用程序,它使用MySQL数据库进行对象标记,其中我使用了标记结构作为
this SO question的答案.
我想实现一个标记层次结构,其中每个标记都可以有一个唯一的父标记.然后搜索父标签T将匹配T的所有后代(即T,父母为T的标签(T的子女),T的孙子等). 最简单的方法是在标签表中添加一个ParentID字段,其中包含标签父标签的ID,如果标签没有父标签则添加一些幻数.然而,搜索后代然后需要重复完整搜索数据库以找到每个“代”中的标记,我想避免这些标记. 一个(可能)更快但更少规范化的方法是拥有一个包含每个标记的所有子项的表,甚至每个标记的所有子代.然而,这会冒数据库中数据不一致的风险(例如,标签是多个父母的子节点). 是否有一种很好的方法可以使查询快速查找后代,同时尽可能保持数据的标准化? 解决方法我用两列实现了它.我在这里简化一下,因为我必须将标签名称保存在单独的字段/表中,因为我必须将其本地化为不同的语言:>标签 例如,查看这些行: tag path --- ---- database database/ mysql database/mysql/ mysql4 database/mysql/mysql4/ mysql4-1 database/mysql/mysql4-1/ oracle database/oracle/ sqlserver database/sqlserver/ sqlserver2005 database/sqlserver/sqlserver2005/ sqlserver2005 database/sqlserver/sqlserver2008/ 等等 在路径字段上使用like运算符,您可以轻松获得所有需要的标记行: SELECT * FROM tags WHERE path LIKE 'database/%' 有一些实现细节,比如当您在层次结构中移动节点时,您还必须更改所有子节点等,但这并不难. 还要确保路径的长度足够长 – 在我的情况下,我没有使用路径的标记名称,而是使用另一个字段来确保我没有太长的路径. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLSERVER 判断一个字符串是否包含特殊字符
- sql-server – 如何在引用表变量时修复“必须声明标量变量”
- SQLServer——聚集索引结构
- 关于DataTime的问题 对比ToShortDateString()和ToString(&#
- sql-server – SQL Server的最佳Raid类型
- 在GROUP_CONCAT的查询中忽略了sql – LIMIT
- SQL Server 2005 通用分页存储过程
- 数据库 – 如何计算Amazon RDS和定价的时间/月份使用情况?
- sqlserver 2000 触发器 存储过程调用外部dll,可以使vb,vc
- SQL Server 缓存命中和缓存未命中&缓存与缓冲间的差