4

我正在为一个活动管理站点设计一个数据库——有一个场地表和一个活动表。每个活动都在一个场地中(存储场地的 id),每个场地都在一个城市中。必须可以按城市搜索事件,城市应该是场地表中的一个字段(这可能会由于拼写错误而导致重复的城市)或者应该有一个城市表(每个城市都有一个 id 和一个名称)和将城市与场所(cityid,venueid)连接起来的一对多表?

我知道这是一个非常基本的问题,但我不确定额外的连接和额外的两个表是否值得。

提前致谢

[编辑] @tvanfosson:从多对多变为一对多,因为每个场地都与一个城市相关联。

4

7 回答 7

3

使用单独的表格——这样你就有了一个城市的主列表来填充下拉列表和/或自动建议字段,并且你可以通过冗余存储 id 而不是字符串来节省空间。如果您拥有一百万个场所,而只有一千个城市,那么无论是在存储方面还是在查询速度方面,这都会大大节省 - 因为您不必从磁盘读取太多数据,而这会降低性能。

您可能不仅应该指定城市,还应该指定州(以便您知道场地位于哪个斯普林菲尔德)。

于 2008-10-18T17:41:29.643 回答
1

我假设这组城市是固定的,相对较小,并且不太可能更新(对于拼写,您总是可以添加新的)。在这种情况下,提供从 XML 文件提供的下拉列表中选择城市并将所选值存储在数据库中的列中的能力。由于输入错误的可能性,我会避免使用用户提供的输入。

如果您有一个等级更高的结构,其中城市位于县中,而县位于州中,那么基于表格的方法可能更合适,因为您可以在多个位置拥有同名的城市。在这种情况下,我认为使用数据库查询比通过 XML 更容易管理级联下拉列表。

注意:可能没有“正确”答案,因为它在很大程度上取决于您的情况。

于 2008-10-18T17:13:00.387 回答
0

可能值得考虑使用带有城市列的地址表。

解决方案实际上取决于其他功能是什么,以及数据库将来是否会用于其他功能。

这也是一个主观的选择,在我看来,拥有一个单独的城市表可能有点过于规范化。

于 2008-10-18T17:02:12.390 回答
0

将链接城市和场所的多对多关系转换为与附加表(类似于场所城市)的一对多关系,您可以在其中存储每个城市的所有场所,然后链接表格事件和存储场所城市的表格场所城市id 到表事件中。

于 2008-10-18T17:13:49.637 回答
0

如果我正确理解您的情况,则必须包含城市表,包括州。您可以根据需要添加新的城市/州(添加前检查表中是否存在)。它将更加高效,并避免重复但拼写错误的城市名称。

于 2008-10-18T21:41:42.890 回答
0

您可能应该有一个城市表 - 即使您现在不需要它,您也可能想要添加邮政编码,或者让城市位于各州。

于 2008-10-18T19:10:08.233 回答
0

不要将城市名称存储在场地中。而是分配一个城市 ID 并将其存储在场地中。在您加入以查找特定城市的事件之前,请从城市名称中解析 city-id 并将其用作您的加入条件。为了方便和提高性能,这可以在存储过程中实现。

于 2008-10-18T22:17:35.623 回答