代码之家  ›  专栏  ›  技术社区  ›  Moak

交叉口DB设计

  •  1
  • Moak  · 技术社区  · 14 年前

    #Street
    street_id | street_nm
    #Crossing
    crossing_id | x | y | street_id_1 | street_id_2
    

    #Street
    street_id | street_nm
    #Crossing
    crossing_id | x | y 
    #street crossing relationship
    street_id | crossing_id
    

    假设每个交叉口只有两条路,有没有理由使用第一个解决方案而不是第一个?

    编辑:

    crossing_id| x | y | street_nm_1 | street_nm_1
    

    此外,我不确定创建一个三条道路的交叉口会如何影响视图。

    2 回复  |  直到 7 年前
        1
  •  2
  •   p.marino    14 年前

    我想要第二个。

    首先,“假设每个十字路口只有两条路”是相当危险的。一般来说,在设计时,我不喜欢依赖于与现实相冲突的假设,因为迟早你的设计会适应“额外的情况”。

    street_id_2-一般来说,查询比较复杂,因为无论何时您寻找给定的道路,都不知道它是否会列在id_1或id_2中。


    关于你关于风景的问题。。。怎么办:

    Select a.cross_id,a.x,a.y,b.street_nm,c.street_nm 
    from crossing a, crossing_rel e, street b, street c 
    where b.street_id=e.street_id and
          c.street_id=e.street_id and
          a.crossing_id=e.crossing_id and
          b.street <> c.street 
    

    请注意,这不会给出任何特定的顺序,哪个街道显示为“x”,哪个街道显示为“y”。。。也许你会喜欢这样的东西:

    Select a.cross_id,a.x,a.y,b.street_nm,c.street_nm 
    from crossing a, crossing_rel e, street b, street c 
    where b.street_id=e.street_id and
          c.street_id=e.street_id and
          a.crossing_id=e.crossing_id and
          b.street_nm < c.street_nm 
    
        2
  •  1
  •   Scott    14 年前

    第二种解决方案是在适当的环境中保持交叉口或街道之间的关系的同时,增加交叉口或街道的灵活性。这是一个微妙的区别,但值得一提。