想问大家一种数据库储存的方式

2018-03-03 20:39:42 +08:00
 rootliang
目前需要保存两两城市间的数据,大致为

| 城市 1 | 城市 2 | 平均时效 | 记录 1 | 记录 2 | 记录 3 |
| -------- | -----: | :----: | :----: | :----: | :----: |

请问该如何去高效储存呢?两个城市的顺序可以不一样,目前也只能想到这种,不知道各位 dalao 们有无更好解决方案
1505 次点击
所在节点    问与答
8 条回复
sirgod
2018-03-03 21:12:45 +08:00
图数据库?
DavidNineRoc
2018-03-03 21:19:09 +08:00
不久多对多关联?价格标志位
DavidNineRoc
2018-03-03 21:19:20 +08:00
心疼我自己的输入法
akira
2018-03-03 21:38:26 +08:00
看城市数量,如果城市数量在一千以内,这样存应该就足够了
rootliang
2018-03-03 23:10:31 +08:00
@sirgod 我去了解一下
@DavidNineRoc /手动狗头 不懂是啥
@akira emmmm 数据应该不会有这么少
rrfeng
2018-03-03 23:12:06 +08:00
表 1
A-B 记录 1
A-B 记录 2
B-A 记录 1

表 2
A-B 平均
DavidNineRoc
2018-03-04 10:21:58 +08:00
cities_table
-------------
id name
1 A
2 B
3 C
##########################
city_records
---------------
city1_id, city2_id avg_time data
---------------------------------------------
1 2 ? 记录一
2 1 ? 记录二
3 1 ? 记录三
mdluo
2018-03-04 12:29:28 +08:00
如果数据库提供了复合键作为主键的功能,自己把两个城市的 ID 存成复合主键就好了。

如果没有复合主键的功能,那么考虑两个城市为一个 Pair,用个 Unsigned Int 32 作为主键,高 16 位是第一个城市的 ID,低 16 位是第二个城市的 ID,总共可以覆盖 2^16 = 65536 个城市了,其他字段存“平均时效”和其他信息。

主键可以利用数据库的索引,直接按两个城市查询的时候速度最快,也能在单表内对“平均时效”这种信息做排序和查询等操作。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/434549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX