2010-03-23 5 views
4

가능한 한 가장 효율적인 데이터베이스를 만들려고합니다. 나의 버스 노선에는 모두 약 10 정거장이 있습니다. 버스는 10 번 정류장에 도달 할 때까지 1 번부터 시작한 다음 다시 돌아옵니다. 이주기는 하루에 3 번 발생합니다.SQL을 사용하여 버스 시간표를 디자인하고 있습니다. 각 버스 노선에는 여러개의 정류장이 있습니다. 각 노선마다 다른 표가 필요합니까?

나는 버스를위한 시간을 효율적으로 생성 할 수있는 방법과 내가 정류장을 저장해야하는 방법에 관해서 정말로 고심하고있다. 한 지점에 모든 정류장을 배치하고 다른 정거장에 시간대를 배치하면 데이터베이스가 매우 동적이지 않습니다.

열에 모든 정류장을 하나씩 저장 한 다음 다른 열에 시간대를 저장하면 원 스톱이 여러 번 반복 될 때까지 더 많은 반복이 발생합니다.

어쩌면 나는 뭔가를 놓치고있다. 나는 이제 막 SQL을 배우기 시작했고 이것은 우리가 설정 한 작업이다.

미리 감사드립니다.

+0

정지는 어떻게 지정됩니까? 그들은 고유 번호 또는 이름을 가지고 있습니까? –

+0

모두 10 개의 정류장이 있습니까? 반복 횟수를 매일 3 회 반복합니까? 모든 경로에서 동일합니까? 다소 복잡한 숙제 문제처럼 들리지만 ... – FrustratedWithFormsDesigner

+1

실제 버스 스케줄링은 결코 간단하지 않고 간단합니다. –

답변

3

당신은 포함 하나의 테이블이 필요합니다 당신의 Timetable :

  • 루트 ID
  • 정지 ID (방향, 순서 번호의 's의 필요
  • 아마도 다른 필드로
  • 시간, 블록 번호, 등)

별도의 테이블을 만들 것을 권장합니다 Bus Stop (위도/경도를 저장하려면 s 등) 및 Route (경로 이름, 첫 번째 정류장, 마지막 정류장, 방향 등을 저장하기 위해).

아마도 이미 알고있을 것 같지만 버스 스케줄링은 매우 빠르게 복잡해 질 수 있습니다. 예를 들면 :

  • 여러 변화가있을 수 있습니다 인쇄 일정

  • 각 경로에 표시 "시점"와 같은 특정 정지를 지정해야 할 수도 있습니다. 당신은 몇 가지를 고려해야 할 수도

분기 자신의 일정을 변경 일정은 아마 토요일과 일요일, 대부분의 기관에 달라집니다 예를 들어, 일부 버전의 시작하거나

  • 를 중지 다른 버스에 종료 이러한 사례를 작성하여 스키마에 추가하십시오.

    도움이 되었습니까?

    A (매우 거친) 1 패스에
  • +0

    안녕하십니까, 매우 도움이됩니다. 현재 다른 색상의 경로에 대해 다른 표가 있는데, 외장 키를 통해 '기본'표에 모두 연결되어 있습니다. . 내가 그 다음, 각 정류장에 도착 루프 내 시간 테이블을 생성으로 시간을 계산하기 위해 PHP는 시간 함수를 사용하여 보는 시간을 저장할 수 생각 . 는 다행스럽게도 필자는 올바른 방향으로 가고 . 필드를 설정할 수 있습니까? 기본값이 있습니까? 예를 들어, blue_route 테이블 아래의 각 정지 이름에는 증가 필드와 같이 '파란색'텍스트가 자동으로 할당 된 필드가 있습니다. 희망이있다 : S – Henryz

    +0

    모든 경로에 대해 하나의 테이블 만 사용하는 것이 좋지만 접근 방식이 건전하지 않은 것이 좋습니다. DEFAULT 키워드를 사용하여 기본 테이블 값을 설정할 수 있습니다. 사용중인 데이터베이스의 문서를 확인하십시오. –

    0

    ,이 같은 테이블에있는 버스 노선 시간을 유지하는 것입니다 :

    StopID Address City etc... (whatever other information you need about each location) 
    
    :

    또한
    RouteID StartingLocationID EndingLocationID TravelTime 
    

    나는 같은 정지의 테이블을 유지하는 것

    RouteID StartingLocationID RouteStartTime 
    

    은 분명히 당신이 당신의 자신의 필요에이를 조정해야하지만,이 말아야가 : 경로 자체에 대한

    나는 저장할 것 시작하는 곳을 알려 줘. 당신은 아마 각 경로를 설명하는 routes 테이블을 갖고 싶어처럼

    그것은 사운드 및 시작 시간이 있습니다

    +0

    안녕하세요, 고맙습니다. 이것은 내가 생각했던 것입니다.하지만 세퍼레이트 테이블의 정류장을 사용하면 어떤 경로가 다른 경로에 속해 있는지를 어떻게 알 수 있습니까? 특히 하나의 스톱이 여러 경로에 속한 경우 – Henryz

    +0

    미안하지만 잘 모르겠습니다 ... StartingLocationID/EndingLocationID는 Stops 테이블의 항목과 일치해야합니다. RouteID와 (StartingID 또는 EndingID)의 조합을 보면 각 버스 경로의 정확한지도를 제공해야합니다. –

    2

    다음은이 작업을 수행하는 방법 (많은의) 하나입니다.

    그런 다음 설명과 각 정류장에서 버스 대기 시간이있는 stops 테이블.

    stopDistanceMapping 테이블에는 두 정류장 사이의 거리와 그 사이의 운전 시간이 표시됩니다.

    마지막으로 routeMap 테이블은 개별 routesstops의 목록을 연결합니다. 각 개별 정류장에서 대기 시간을 사용하고 stopDistanceMapping에서 시간/거리를 사용하여 routes 테이블 거리와 시간을 채울 수 있습니다.

    행운을 빈다.

    +0

    이것은 훨씬 더 효율적인 방법 일 것입니다. 어떻게 다른 경로에 정류장을 연결할 수 있는지 잘 모르겠습니다. 예를 들어, 파란색으로가는 모든 정류장을 선택하려는 경우 그것은 괜찮을 것이다. 그러나 어떤 정지가 다수의 길에 속하면 어떻게 될까? S 이 데이터베이스 물건을 일주일 내내하고 꽤 하드 코어이다. 나는 그것을 좋아한다. :) – Henryz