连接两个表

时间:2012-06-24 19:26:43

标签: database database-design relational-database

我正在为Cab / Taxi服务设计数据库。有一张出租车服务详情的表格。

* 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表连接到locations表。但我无法弄清楚如何。 如果区内只有一项服务,我本可以这样做。

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

但正如我之前所说,服务可以有很多地区。

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

这会违反1NF。

我希望能够在某种情况下获得结果,例如,如果用户使用位置名称进行搜索,他应该获得该区域的出租车服务。

我需要在数据库中进行哪些更改,表结构才能完成此任务?

如果有些内容令人困惑,请告诉我,我会尽力澄清。我很难解释事情。谢谢。

2 个答案:

答案 0 :(得分:1)

连接表上有多个条目。

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

虽然您通过在表格中添加SIDName来复制数据,但这仍然是1NF。

答案 1 :(得分:1)

您的连接表似乎只需要为cab_services表和位置表定义FK列(即,注意Oded关于重复的内容)。因此,例如,如果“ABC Taxi”在所有“CO”位置都可用,那么连接表将具有以下记录:

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