V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rootliang
V2EX  ›  问与答

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

  •  
  •   rootliang · 2018-03-03 20:39:42 +08:00 · 1492 次点击
    这是一个创建于 2456 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前需要保存两两城市间的数据,大致为

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

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

    表 2
    A-B 平均
    DavidNineRoc
        7
    DavidNineRoc  
       2018-03-04 10:21:58 +08:00   ❤️ 1
    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
        8
    mdluo  
       2018-03-04 12:29:28 +08:00   ❤️ 1
    如果数据库提供了复合键作为主键的功能,自己把两个城市的 ID 存成复合主键就好了。

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

    主键可以利用数据库的索引,直接按两个城市查询的时候速度最快,也能在单表内对“平均时效”这种信息做排序和查询等操作。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1233 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.