This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / 楼下讨论的树形Query是一种相对来说较简单的树,如果Parent(s)不止一个,有两个或以上,怎么用table来表示,怎样Query, Query出来结果又怎样表示?有没有朋友探讨过?
-sunday8(sunday8);
2007-8-10
(#3861710@0)
-
那就是图不是树了,还是用关系表来存储。但这关系必须转移到category之外,形成一个只有 chid id, parent id的表。oracle的connect by适用于图的检索,10G还有功能可以删除重复路径,也可限制层数
-newkid(newkid);
2007-8-10
(#3861787@0)
-
回大学从学数据结构、图论(离散数学)。
-quisling(quisling);
2007-8-10
(#3861840@0)
-
很实际的一个例子。一个(子)公司可能有一个或多个(父)公司拥有不同比例的股份(ownership),而占股份最多的父公司又不一定有决定权(controlling)。比较复杂的,今天不玩了。:)
-bdbs(不多不少);
2007-8-10
(#3861864@0)
-
改天咱们再讨论讨论?我虽然好为人师,但也追求进步。
-newkid(newkid);
2007-8-10
(#3861929@0)
-
Welcome all of you to join my offline discussion if you are interested and live in GTA area.
-sunday8(sunday8);
2007-8-10
(#3861945@0)
-
说起来可能难以致信,但我下班后比上班还没空
-newkid(newkid);
2007-8-10
(#3861951@0)
-
:D Its life.
-sunday8(sunday8);
2007-8-10
(#3861957@0)
-
one of examples would be a tree on the right hand side. see the url.
-sunday8(sunday8);
2007-8-13
(#3865843@0)
-
前两个是普通的树,第三个是个图,用两张表存储:第一张存每个节点信息,第二张专门表示节点关系(参见我上贴)
-newkid(newkid);
2007-8-13
(#3866360@0)
-
interesting.. how would you render the query result on web?The query could be interesting too.. e.g query all children belong to a specified node.
-sunday8(sunday8);
2007-8-14
{87}
(#3869533@0)
-
这里其实有两个问题。一个是存储问题,一个是reporting问题。通常存储都是采用First/Second Normal Form。Query长得什么样则由reporting/presentation requirement决定。
-bdbs(不多不少);
2007-8-14
(#3869675@0)
-
我说的方法是third normal form.关系表里除了ID啥也没有。如果是你会怎么设计?
-newkid(newkid);
2007-8-15
(#3870209@0)
-
我们的实际应用中,因为是Data Warehouse的环境,所以所有原始数据都是fully normalized(4NF)的,比你的方法更甚。数据库的设计应该根据具体应用来决定,而不能闭门造车。
-bdbs(不多不少);
2007-8-15
(#3870304@0)
-
这个帖子究竟是在讨论database table design还是data structure?
-sowen(sowen);
2007-8-15
(#3870310@0)
-
both, I guess. data structure + business requirement 决定了database table design.
-bdbs(不多不少);
2007-8-15
(#3870350@0)
-
扯到哪算哪,这也不是什么严肃的话题。
-newkid(newkid);
2007-8-15
(#3870450@0)
-
数据展示我是外行,但我猜有现成的客户端插件吧。我用过几个数据库建模工具,它们的“逆向工程”从数据库抓取的ER图也不太好看。至于query,我去年在这贴过一个类似的问题。用ORACLE的CONNECT BY 查询可以遍历,它也可以去掉死循环,但有些重复的路径辨认不出来。例如ABCDE 和 ADE,节点D重合了,但CONNECT BY 认为是不同路径又各自展开,搞出很多重复数据。后来我自己写了个“广度优先”搜索,其实也挺简单,一层层地把所有下级节点塞到一张表里直到检索结束。
-newkid(newkid);
2007-8-15
{307}
(#3870226@0)