求教一个关于编写数据库程序的问题,可用任何语言/数据库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
apaceeee
V2EX    问与答

求教一个关于编写数据库程序的问题,可用任何语言/数据库

  •  
  •   apaceeee 2014-07-11 23:03:14 +08:00 3530 次点击
    这是一个创建于 4117 天前的主题,其中的信息可能已经有所发展或是发生改变。
    急需这样一种程序,求各位技术宅和IT高手帮下,感激不尽:

    我知道任意一只羊的父本和母本,父本+母本=子一代
    我希望通过一次性的录入完所有羊的数据后,检索,此时直接能够看到该羊三代以内的家谱,包括父母、所有的祖父母、曾祖父母,以系谱图的方式呈现;同时,希望能够列出它所有3代以内的后代。

    提供个思路也行,谢谢各位了!
    14 条回复    2014-07-12 00:31:44 +08:00
    zhpooer
        1
    zhpooer  
       2014-07-11 23:25:24 +08:00
    oracle?ok?
    ChanneW
        2
    ChanneW  
       2014-07-11 23:27:34 +08:00
    id | id_father | id_mother
    apaceeee
        3
    apaceeee  
    OP
       2014-07-11 23:39:40 +08:00 via iPad
    @zhpooer 弱弱地问下,如何用它实现…
    min
        4
    min  
       2014-07-11 23:44:51 +08:00
    你去找个做家谱的软件呗

    老外有很多这种软件,找到,装上,把羊的信息输进去,搞定

    而且还有可以放羊的照片呢
    zhpooer
        5
    zhpooer  
       2014-07-11 23:46:44 +08:00
    建表 id | id_father | id_mother, 然后可以直接用 pl/sql 写若干个存储过程, 最后调用一个存储过程 find(id) 打印出需要的内容
    187j3x1
        6
    187j3x1  
       2014-07-11 23:51:02 +08:00
    有多少只羊啊 少量用json加前端 好像这样行吧
    apaceeee
        7
    apaceeee  
    OP
       2014-07-11 23:51:37 +08:00 via iPad
    @min 呃,能推荐几个吗,我看看…谢谢
    apaceeee
        8
    apaceeee  
    OP
       2014-07-11 23:52:21 +08:00 via iPad
    @187j3x1 非常多……得几万只吧……
    apaceeee
        9
    apaceeee  
    OP
       2014-07-11 23:52:46 +08:00 via iPad
    @zhpooer 谢谢
    min
        10
    min  
       2014-07-11 23:55:25 +08:00
    你这种伸手党哪里来的,呼叫站长封他的ip段
    @apaceeee
    txlty
        11
    txlty  
       2014-07-11 23:59:31 +08:00
    @min 楼主说了提供思路也行嘛。
    @apaceeee 遍历+递归,如何?
    jianghu52
        12
    jianghu52  
       2014-07-12 00:12:40 +08:00   1
    我比较笨。所以只会笨方法。
    首先,数据库就是想channew 那样,3个id。
    然后就是笨笨的循环套循环遍历数据库
    第一层循环取父id,当父id不为空时,放一个数组a,然后再第二层循环,以这个父id为子id,求他的父ID(其实是爷爷ID)再放进一个数组b,然后第三层,得到曾爷爷的id,放数组c。(记得过滤重复的)

    这样就得到了a b c 三层。
    同样的方式 得到 母系的三层。

    不会画图,但是原理是一样的。
    把曾爷爷 曾奶奶的数组拿出来。谁先都行,假设是曾爷爷的数组开始循环,那么第一项是曾爷爷,第二项就是曾奶奶数组的第一项,查数据库,有这个id,且这个id在爷爷(或者奶奶)辈数组里面,那么显示这一项,如果不在,那么这一组都不成立。继续用曾奶奶的数组的第二项匹配,。。。。曾爷爷的第一项匹配完之后,再来就是曾爷爷的第二项同曾奶奶的第一项开始匹配。。。。。

    以上就是大概思路。如果所有的羊的辈分只包含上下一层的话,是没有问题的。但是如果包含两层,也就是乱伦,比如一只羊跟她的曾奶奶搞上了,然后再生出一个养的时候,这个图我就不知道会是什么样了。
    apaceeee
        13
    apaceeee  
    OP
       2014-07-12 00:14:52 +08:00 via iPad
    @min 呵呵。

    @txlty 实在不行就考虑这个吧…
    akfish
        14
    akfish  
       2014-07-12 00:31:44 +08:00
    目测很适合用Google才发布的新玩具来做:
    https://github.com/google/cayley
    你的数据不过就是一个graph的结构,Caley直接存的就是graph。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2571 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 19ms UTC 04:02 PVG 12:02 LAX 21:02 JFK 00:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86