2012-06-24 4 views
1

택시/택시 서비스 용 데이터베이스를 설계하고 있습니다. 택시 서비스에 대한 세부 정보가 있습니다.두 테이블 연결

* cab_services *

+---------------------+ 
| SID |  Name | 
|---------------------| 
| S001 | ABC Taxi | 
| S002 | XYZ Cabs | 
| S003 | MN Taxi | 
| S004 | OP Cabs | 
|_______|_____________| 

그리고 다른 테이블이 위치는있다.

위치

+-----------------------------------+ 
| LID | Code |  Location  | 
|----------------|------------------| 
| L001 | CO | Akarawita  | 
| L002 | CO | Angamuwa  | 
| L003 | CO | Batawala  | 
| L004 | CO | Avissawella | 
| L005 | CO | Battaramulla | 
| L006 | GQ | Ambepussa  | 
| L007 | GQ | Bemmulla  | 
| L008 | GQ | Biyagama  | 
| L008 | GQ | Alawala  | 
| L010 | GQ | Andiambalama | 
| L011 | GQ | Biyagama IPZ | 
| L012 | KT | Bellana  | 
| L013 | KT | Bolossagama | 
| L014 | KT | Bombuwala  | 
| L015 | KT | Alutgama  | 
| L016 | KT | Alubomulla  | 
|_______|________|__________________| 

들이 지구에 따라 분류되어 있습니다. (CO, GQ, KT) 각 지구에는 여러 도시/도시가 있습니다.

택시 서비스가 복합 지구에서 서비스를 제공하고있을 수 있습니다. 그리고 한 지구는 여러 택시 서비스를 제공 할 수 있습니다. 그 많은 종류의 많은 시나리오.

cab_services 테이블을 위치 테이블에 연결하려고합니다. 그러나 나는 어떻게하는지 알 수 없다. 하나의 서비스 만이 지구에 있다면 나는 이렇게했을 것입니다.

+-------+-------------+---------+ 
| SID |  Name | Locs | 
|-------+-------------+---------| 
| S001 | ABC Taxi | CO | 
|_______|_____________|_________| 

하지만 전에 말했듯이 서비스에는 많은 지역이있을 수 있습니다.

+-------+-------------+---------+ 
| SID |  Name | Locs | 
|-------+-------------+---------| 
| S001 | ABC Taxi | CO, KT | 
|_______|_____________|_________| 

이것은 1NF를 위반합니다.

사용자가 위치 이름을 사용하여 검색하면 해당 지역에서 택시 서비스를 받아야한다고 말하는 것과 같은 상황에서 결과를 얻을 수 있기를 원합니다.

데이터베이스에서 수행해야 할 변경 사항은이를 수행하기위한 테이블 구조입니까?

혼란스러운 부분이 있으면 알려주세요. 더 자세히 설명해 드리겠습니다. 나는 물건을 설명하는 것에 꽤 나쁘다. 고맙습니다.

+0

+1 – stakx

+0

@stakx에 동의합니다. 오히려 ascii text/markdown에서 이미지를 볼 수 있습니다. – Oded

+0

고맙습니다. @stakx와 Oded. 게시물을 편집하고 이미지를 ASCII 테이블 구조로 바꿨습니다. – Isuru

답변

1

연결 테이블이 cab_services 테이블과 위치 테이블에 대한 FK 열만 정의하면됩니다 (중복 된 점에 대해서는 Oded가 유의하십시오). 예를 들어 모든 "CO"위치에서 "ABC 택시"를 사용할 수있는 경우 연결된 테이블에 다음과 같은 레코드가 있습니다.

SID | LID 
----------- 
S001 | L001 
S001 | L002 
S001 | L003 
S001 | L004 
S001 | L005 
+0

나는 뭔가를 가까이서 해냈다. 나는 두 개의 열이있는 다른 테이블을 만들었습니다. [this] (http://i.imgur.com/IzzME.png) 이미지를 참조하십시오. [this] (http://pastebin.com/rsywTuQ8) 쿼리를 사용하여 원하는 결과를 얻을 수 있습니다. 고맙습니다. – Isuru

+0

예, 특정 지역의 모든 도시/도시를 서비스 할 것인가, 아니면 아무 것도 다루지 않는다는 가정하에 효과가있는 것 같습니다. 그래서 대답이 아닌가? 이 또는 Oded의 응답을 수락하지 않는 이유는 무엇입니까? – blins

+0

예, 유일한 퍼지 부분입니다. 그러나 나는 그것을 당분간 간과 할 수있다. 이것은 상업용 응용 프로그램이 아니라 애완 동물 프로젝트입니다. :) – Isuru

1

연결 테이블에는 여러 항목이 있습니다.

SID Name   Locs 
----------------------- 
S001 ABC Taxi  CO 
S001 ABC Taxi  KT 

표에 SIDName를함으로써 데이터를 복제 되더라도이, 1NF에 아직도있다.

+0

먼저 감사합니다. 내가 참조. 그러나 다른 테이블도'cab_services' 테이블에 의존합니다. 나는'SID'를 ** PK **로 유지하고 있습니다. 이렇게하면 일이 엉망이 될 것입니다. 그러나 나는 이런 것을했다. 나는 두 개의 열이있는 다른 테이블을 만들었습니다. [this] (http://i.imgur.com/IzzME.png) 이미지를 참조하십시오. [this] (http://pastebin.com/rsywTuQ8) 쿼리를 사용하여 원하는 결과를 얻을 수 있습니다.이렇게하면'cab_services' 테이블에 레코드 중복을 피할 수 있습니다. 제 수정안에 결함이 있는지 알려주세요. – Isuru