我想弄清楚什么是最佳数据库和表结构来存储类型(var)char的节点之间的关系。我多年前最后一次使用MySQL作为一些简单的PHP网页的后端,并且从未超越过。我希望一些经验丰富的用户可以给我他们的意见。节点关系的MySQL表
比方说,我有一大堆的名字:
- 托马斯
- 简
- 菲利克斯
- 马克
- 安妮
我现在想存储他们的关系。我的想法是有可能看起来像这样两个表:
names (id, name) relationships (id_1, id_2)
0 Thomas 0 1
1 Jane 0 3
2 Felix 1 2
3 Marc 3 4
4 Anne ...
...
数据的范围如下:
- 表“名称”将包含约。 500万行。
- 表'关系'将包含150-200万行。
- 数据库将只能由我本地访问(服务器和客户端是同一台机器)
- 我不需要Web服务器的响应能力,在我访问它的几个场合中只有很高的吞吐量(以减少等待时间)
我的问题是:
- 我记得正确使用PRIMARY_KEY是很重要的。我隐约记得有可能将键分配到两列(即id_1,id_2在我的情况);这有助于查询我想象?
- 有没有办法在MySQL内部防止在插入过程中创建重复关系(例如0:4 & 4:0)?
- MySQL默认为InnoDB。这是你会为我的场景推荐的数据库吗?
任何指针欢迎。谢谢。
你还没有谈到节点关系。他们是随机分配多对多关系还是某种树形结构?这种关系是否有方向性(即亲子关系)?关于存储引擎选择,你可以谈谈你正在使用的数据访问模式和MySQL版本吗? –
@Mike Brant我应该更具体,但没有考虑到这些区别。在我的情况下,这种关系不是有方向性的,即我只需要存储两个节点是否连接。没有任何类型的层次结构。每个表格将在一个长期会话中填充(首先是左侧,然后是右侧)(通过Python进行SQL查询),然后保持这种状态。稍后我会完整地读出两张表格,结合字符串及其关系。我可能会这样做十几次,直到我的最终产品令人满意。 – Adrian