2008-10-18 72 views
4

我正在为事件管理站点设计一个数据库 - 有一个场地表和一个事件表。每个活动都在一个场地(存储场地的ID),每个场地都在一个城市。如果城市是场地表中的一个场(这可能会导致城市因拼写错误而导致城市重复),或者应该有一张城市表(每个城市有一个id和一个名称),一个连接城市与场地(cityid,venueid)的一对多表格?数据库设计问题 - 字段或新表格+一对多

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

预先感谢

[编辑] @tvanfosson:因为每个地点与单个城市相关联的从多到多对一一对多更改。

回答

0

这可能是值得考虑的地址表,与城市列。

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

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

1

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

如果你有一个更分层的结构,城市位于各州的州,那么基于表格的方法可能更合适,因为你可以在多个地点有相同名称的城市。在这种情况下,我认为使用数据库查询比使用XML更容易管理级联下拉菜单。

注意:可能没有“正确”的答案,因为它高度依赖于你的情况。

0

将多个对多个关系连接起来,将城市和场地连接到一个多对多的关系中(比如venue_city),您可以在其中存储每个城市的所有场地,然后链接表格事件和表格venue_city将venue_city id存储到表事件中。

3

使用一个单独的表 - 这样,你有城市的主列表来填充下拉菜单和/或自动提示字段,您通过存储的ID字符串而不是冗余节省空间。如果你有一百万个场馆,而且只有一千个城市,无论是在存储方面还是在查询速度方面,这都是非常节省的 - 因为你不必在磁盘上读取尽可能多的内容,这就是杀死性能的原因。

您应该指定的不仅仅是一个城市,还包括州(以便您知道场地所在的斯普林菲尔德)。

0

你应该有一个城市表 - 即使你现在不需要它,你可能想要添加邮政编码,或者让城市处于状态。

0

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

0

请勿在会场存放城市名称。取而代之的是分配一个城市ID并将其存储在场地中。在您进行加入以查找特定城市的活动之前,请从城市名称中解析city-id并将其用作加入标准。为了方便和提高性能,这可以在存储过程中实现。