100分求一数据分类结构设计思路/ 或者alibaba产品分类及检索设计结构

dannyrz 2008-04-19 09:30:11
按 时间
准备期
怀孕与优生
不孕不育
怀孕期
孕早期
胎儿发育
孕期饮食
孕妇保健
孕中期
胎儿发育
科学胎教
孕期饮食
孕妇保健
孕晚期
胎儿发育
科学胎教
孕期饮食
孕妇保健

按 主题
孕前产后
怀孕与优生
不孕不育
............
小儿护理发育
胎儿发育


以上是要求,其中
怀孕与优生同时属于按时间的准备期和按主题的孕前与产后
胎儿发育同时属于按时间的怀孕期的孕早期中晚期,也属于按主题的小儿护理发育
其他也一样道理。

假设开始发布一篇文章,那么这篇文章该怎么进行归类?
1,我想要的是无论按照哪种方式发布,按照主题或者按照日期
在检索时也无论按照哪种方式发布,按照主题或者按照日期,都能把这篇文章检索出来
3,如果按主题搜索 胎儿发育,能同时检索出孕早中晚 3期的 数据


以上的分类设计在版块一 属于知识版块类别
将来会有问答版块
而问答版块的问题发步时分类和知识板块一样


设计最优化的数据库
扩展性强,比如将来还会增加按照 时间 主题 地区....... 分
...全文
148 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu_gx 2008-04-21
  • 打赏
  • 举报
回复
帮顶
zbc1009 2008-04-21
  • 打赏
  • 举报
回复
共同学习:)
cson_cson 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dannyrz 的回复:]
我想要解决的问题是 这个类别可能会有2个父类别,
比如像 胎儿发育 他有多个 “父亲”
并且在按主题下是 第2层 在时间下是第3层
我想要一个这样的比较优化的结构设计
[/Quote]
3楼的可以呀:
大类表 T_CLASS:ID NAME PID
1 按时间 0
2 准备期 1
3 怀孕期 1
4 孕早期 3
5 孕中期 3
6 孕晚期 3
7 按主题 0
3 孕前产后 7
....
分类表 T_TYPE: ID NAME
1 怀孕与优生
2 不孕不育
3 胎儿发育
4 孕期饮食
5 孕妇保健
...
分类大类表 T_CLASSTYPE: CID TID
2 1
2 2
4 3
4 4
4 5
...
文章表 T_Article: ID TID(分类ID) ...

zbc1009 2008-04-20
  • 打赏
  • 举报
回复
文章类别表(ClassID,ArticleID)
可以让你关联任意文章和任意类别。

如果你一个类别可能有两个父亲类别,那么可能要拆分类别表为:
类别表(ClassID,ClassName,ClassDesc,...)
类别关联表(ClassID,ParentClassID)

这样应该就能满足多对多的类别关系。。。
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
我想要解决的问题是 这个类别可能会有2个父类别,
比如像 胎儿发育 他有多个 “父亲”
并且在按主题下是 第2层 在时间下是第3层
我想要一个这样的比较优化的结构设计
damo_baby 2008-04-20
  • 打赏
  • 举报
回复
所有数据均保存一个表中,通过OBJID,PARENTID来建立他们的关系,不知这样能否解决楼主的问题
damo_baby 2008-04-20
  • 打赏
  • 举报
回复
需要建立一个表
类别表(objid,parentid,objname,objjc)
这样应该就能满足这个关系。。。

如下表:
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[type](
[Objid] [int] IDENTITY(1,1) NOT NULL,
[Parentid] [int] NOT NULL DEFAULT (0),
[Objname] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Objjc] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Objorder] [int] NULL CONSTRAINT [DF_type_Objorder] DEFAULT (0),
[Objpy] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Objexplain] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL,
[Memo] [text] COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_type] PRIMARY KEY CLUSTERED
(
[Objname] ASC
) ON [PRIMARY],
CONSTRAINT [IX_type_ID] UNIQUE NONCLUSTERED
(
[Objid] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
USE [test]
GO
ALTER TABLE [dbo].[type] WITH CHECK ADD CONSTRAINT [FK_type_type] FOREIGN KEY([Parentid])
REFERENCES [dbo].[type] ([Objid])
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
首先感谢 zbc1009一直关注,
这个帖子由于发布时不小心刷新又发了一帖,所以总分有200分,小弟不会亏待你的。
自己水平太低,得抓紧努力。
zbc1009 2008-04-20
  • 打赏
  • 举报
回复
怎么建立索引可以参考联机帮助得到比较详细的解释。。。
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
我的索引概念错了,同时请教如何创建和应用索引
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
添加索引是我在考虑的。在我遇到的问题中,索引就比较麻烦。我无从下手。主要是由于自己没有这方面的经验。
如果我按照时间建立索引,类似 001 000 000 这样的模式,那可以,没有问题,那么当有多种检索方法时能?
我不知道我的方法是否很菜 或者很不专业,比如 按照时间 为 A-001 001 000 按照主题为 B-001 001 000
在此只有2个分类时 添加这2个层次字段可以满足要求。但是将来我如果在最顶级增加了 按照 性别搜索,是不是就得 又添加一个 C-001 001 000 这显然不怎么科学 。
或许我的说法很没基础知识,还是希望大哥们多发表见解帮忙。
zbc1009 2008-04-20
  • 打赏
  • 举报
回复
尽量的少建表,减少查询的联接,有助于提高查询效率,但是会使数据冗余;如果缩减冗余度,就要尽量满足范式要求,比如3NF。不好武断的说哪个效率更好,因为数据量到底差异多少还要看具体情况。设计决定之后就可以考虑优化的方法,比如添加索引,建立分区等。
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zbc1009 的回复:]
文章类别表(ClassID,ArticleID)
可以让你关联任意文章和任意类别。

如果你一个类别可能有两个父亲类别,那么可能要拆分类别表为:
类别表(ClassID,ClassName,ClassDesc,...)
类别关联表(ClassID,ParentClassID)

这样应该就能满足多对多的类别关系。。。
[/Quote]


我的设计也是这样的,我不知道有没有更好的解决方案。我希望大家也能帮忙一起讨论下如何进行数据检索和遍历类别。需要的是比较有效率的检索。

包括检索父类出现全部子类文章,包括孙类,不是说不会检索,就是需要一种比较有效率的设计。尽量少用递归。
比如 如果按主题搜索 胎儿发育,能同时检索出孕早中晚 3期的 数据



dannyrz 2008-04-20
  • 打赏
  • 举报
回复
明天上班我就要结帖了,我给分一向大方。也不知道我的分还有多少,该怎么看。哈哈
dannyrz 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dannyrz 的回复:]
我想要解决的问题是 这个类别可能会有2个父类别,
比如像 胎儿发育 他有多个 “父亲”
并且在按主题下是 第2层 在时间下是第3层
我想要一个这样的比较优化的结构设计
[/Quote]

我的设计也是这样的,我不知道有没有更好的解决方案。我希望大家也能帮忙一起讨论下如何进行数据检索和遍历类别。需要的是比较有效率的检索。

包括检索父类出现全部子类文章,包括孙类,不是说不会检索,就是需要一种比较有效率的设计。尽量少用递归。
比如 如果按主题搜索 胎儿发育,能同时检索出孕早中晚 3期的 数据
zbc1009 2008-04-19
  • 打赏
  • 举报
回复
如果理解没错的话,应该你只要把类别设计成分级的就可以了,工厂的BOM结构就差不多。比如:
类别表(ClassID,ParentClassID,ClassName,ClassDesc,...)
这个就是普通的类别设计,唯一多了一个父亲类别(ParentClassID),就是为了实现那种一个类别属于其他大类别的关系。

文章表(ArticleID,ArticleTitle,ArticleContent,...)
这个表没有任何特殊性,就是普通的文章表

文章类别表(ClassID,ArticleID)
这个表不能跟文章表合并,为什么呢?为了满足你那种文章按不同标准属于不同类别的需求,如果保存在文章表,文章就只能属于一个类别,跟你的需求相背。

个人建议,仅作设计参考。。。
dannyrz 2008-04-19
  • 打赏
  • 举报
回复
我想首先知道这个分类数据表该怎么设计才科学
-狙击手- 2008-04-19
  • 打赏
  • 举报
回复
1,我想要的是无论按照哪种方式发布,按照主题或者按照日期
在检索时也无论按照哪种方式发布,按照主题或者按照日期,都能把这篇文章检索出来

---
给文章两个分类字段关联分类表
查询时根据选择构造不同的SQL语句或过滤语句

3,如果按主题搜索 胎儿发育,能同时检索出孕早中晚 3期的 数据
BOM问题,查相关例子

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧