有一个问题一直没有想通,如果我要做一个公交查询系统,比如城市有公交线路50条,我需要将这写线路所对应的名称都输入到表里,那么一个线路的公交车的站点输入到一个字段里,还是每个站点都放在不同的字段里?
  如果都放在一个字段里的话,比如:A,B,C,D,E,F,G  这些是2路公交车所经历的所有站。那么的需求是只查询D--F站,那么在把这些字符串都放在一个字段里的话,就得通过程序来截取字符串来取得。
  如果放在不同的字段里,比如A,B,C,D,E,F,G 各占有一个字段,那么我要是查询D--F ,就得先select整张表,然后把各个字段里的值取出,再通过程序来截取。 但这种方法还有一点是,虽然说2路是有12站, 但是3路确有24个站,如果把2路和3路放在一张表里,那2路其他的字段岂不是得设置为null?
  还有,如果把每个线路的车分别放在一张表里,那么城市50个线路就有50张表,100个线路就有100张表。
  这些设计都不是特别的合理。主要是需求所致,如果查询一个线路的话,只显示从C点到G点,其他的站点不显示。
  希望大家讨论一下,遇到这种情况应该如何设计数据表。

解决方案 »

  1.   

    线路ID 站名ID
    2      1
    2      2
    2      3站名对照表
    站名ID 站名
    1      A
    2      B
    3      C
      

  2.   

    通过站名ID连接,在站名ID上建立索引
      

  3.   

    线路ID 站名ID 或许 还要加一个序号 正向\反向标志(有些公交来回线路不一样的)
      

  4.   

    一般是两张表、1. 公交线路基本信息表 (线路ID,运营时间,发车间隔,)
     101路, 5:00 ~22:00,10分钟,无人,2. 站点基本信息表(站点ID,名称,)
    1, 长安街北,。。
    2, 人民东路,。。3.线路信息表(线路ID,站点ID,序号,。。)