2012-06-24 158 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文本/降价看到这些图像。 – Oded

+0

谢谢@stakx和Oded。我编辑了这篇文章,并用ascii表格结构替换了图片。 – Isuru

回答

1

看起来您的连接表只需要为cab_services表和位置表定义FK列(即注意关于重复的Oded状态)。因此,例如,如果“ABC出租车”在所有“CO”位置可用,那么连接表将具有以下记录:

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

我做了一些关闭。我创建了2列的另一个表。参见[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 

这仍然是1NF,虽然你是在为表SIDName复制数据。

+0

首先谢谢你。我懂了。但其他一些表也取决于'cab_services'表。我保留'SID'作为** PK **,这样做会搞砸了。但是我做了这样的事情。我创建了2列的另一个表。参见[this](http://i.imgur.com/IzzME.png)图片。并且使用[this](http://pastebin.com/rsywTuQ8)查询我能够得到理想的结果。这是避免'cab_services'表中的重复记录。请让我知道我的修改是否存在缺陷。 – Isuru