1

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

*出租车服务*

+---------------------+
|  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     |
|_______|________|__________________|

请注意,它们是按地区分类的。(COGQKT)每个区都有多个城镇/城市。

出租车服务可能会在多个地区提供服务。一个区可能有多个出租车服务。它是一种多对多的场景。

我正在尝试将 cab_services 表与位置表连接起来。但我不知道该怎么做。如果该地区只有一项服务,我会做这样的事情。

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

但是就像我之前说的,一个服务可以有很多区。

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

这将违反 1NF。

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

我必须在我的数据库、表结构中进行哪些更改才能完成此操作?

如果某些部分令人困惑,请告诉我,我会尽力进一步澄清。我很不擅长解释事情。谢谢你。

4

2 回答 2

1

您将在连接表上有多个条目。

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

这仍然在 1NF 中,尽管您通过在表中具有SID和来复制数据。Name

于 2012-06-24T19:29:50.133 回答
1

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

 SID | LID
-----------
S001 | L001
S001 | L002
S001 | L003
S001 | L004
S001 | L005
于 2012-06-24T19:45:43.100 回答