rootliang
V2EX  ›  问与答

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

  •  
  •   rootliang · Mar 3, 2018 · 1927 views
    This topic created in 3047 days ago, the information mentioned may be changed or developed.
    目前需要保存两两城市间的数据,大致为

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

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

    表 2
    A-B 平均
    DavidNineRoc
        7
    DavidNineRoc  
       Mar 4, 2018   ❤️ 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  
       Mar 4, 2018   ❤️ 1
    如果数据库提供了复合键作为主键的功能,自己把两个城市的 ID 存成复合主键就好了。

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

    主键可以利用数据库的索引,直接按两个城市查询的时候速度最快,也能在单表内对“平均时效”这种信息做排序和查询等操作。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3616 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 10:35 · PVG 18:35 · LAX 03:35 · JFK 06:35
    ♥ Do have faith in what you're doing.