Python技术栈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1976|回复: 16

[已解决] 【求问】怎么设计一个网状数据库

[复制链接]

1

主题

10

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2018-10-22 09:21:52 | 显示全部楼层 |阅读模式
比如我想设计一个能够存储人物关系的数据库。
比如这样的(图随便找的)


几个条件:
人物数量不定
人物之间的关系连接数量不定
目前我想的是创建2个表:
其一,存储人物信息,以及人物相关的关系连接
字段:id, data, links
其二,存储每个关系连接,包括两端的2个人物,以及关系的描述信息
字段:id, p1, p2, data
但是,遇到了问题:
表一中之所以保存人物相关的关系连接,起初是为了满足这样的搜索需要:比如我想查小明与所有有关系的人的关系。这就有了2种方案:
第一种,不在表一存关系,而是通过where在表二中查询来获得,这样的话就会想使用索引,来提升查询速度。可是可能存在2个连接,它们的data不同,但p1与p2相同。也可能一个连接中存在方向性,比如父子,那么p1=父的id,p2=子的id。了解了所谓“聚集索引”,然而只能有一个的话,意味着“父子”连接我得写2行,父子 与 子父。对于这里,我就不知道该用什么索引类型比较好了,也不知道查询效率究竟如何。
于是想了第二种,在表一中存关系,存的是关系的id数组,这样就能迅速完成查询。可能以字符串存储,也可能以二进制存储。但这种方法我不知道数据库内部会怎么处理,因为这一字段会频繁修改,而当人物非常多时,意味着数组很长,那么每一次修改的量就很大,而且内容的长度还不确定。
请问对这样的数据库该如何设计呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

9

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2018-10-22 09:11:44 | 显示全部楼层
昨天发太晚,自顶
回复

使用道具 举报

1

主题

10

帖子

58

积分

注册会员

Rank: 2

积分
58
 楼主| 发表于 2018-10-22 09:27:03 | 显示全部楼层
又想到了第三种方案,创建表三,作为表二的辅助表。
表三字段:id, p1
对于表二中,凡是具有方向性的连接,都在表三中建立一行,p1为表二中p2的值。然后表二表三均以自己的p1字段作为聚集索引,这样每次where查询就在表二与表三中分别执行一次。不知这样如何?
回复

使用道具 举报

0

主题

3

帖子

47

积分

新手上路

Rank: 1

积分
47
发表于 2018-10-22 09:41:45 | 显示全部楼层
这是僵尸吗?
回复

使用道具 举报

1

主题

9

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2018-10-22 09:56:13 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

3

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2018-10-22 09:56:14 | 显示全部楼层
子查连查不可以嘛

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

5

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2018-10-22 10:11:58 | 显示全部楼层
小白一个 顶一下
回复

使用道具 举报

0

主题

8

帖子

30

积分

版主

Rank: 7Rank: 7Rank: 7

积分
30
发表于 2018-10-22 10:43:43 | 显示全部楼层
neo4j了解一下。。

看隔壁用它做过网状的阅读笔记,很炫酷的样子。 而且也蛮方便的。。

图数据用传统的表数据来设计确实略纠结
回复

使用道具 举报

0

主题

7

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-10-22 14:25:29 | 显示全部楼层
围观 围观 沙发在哪里!!!
回复

使用道具 举报

0

主题

6

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-10-22 15:08:37 | 显示全部楼层
我也顶起出售广告位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQ|Archiver|手机版|小黑屋|Python.BBS ( 鲁ICP备18046958号 )

GMT+8, 2020-8-4 09:52 , Processed in 0.135034 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表