使用MySQL进行多区域市场数据库设计

时间:2014-11-05 19:45:18

标签: php mysql database regional

我正在寻找有关多地区网站数据库结构的指导。

我正在建立一个类似于craigslist.com的网站,允许用户在他们的城市发布添加内容。我正在使用MySQL数据库。

我想将区域作为子文件夹链接到子域,例如ca.mysite.com转到mysite.com/ca。

我的问题是,当我想在我的网站上添加另一个城市时,如何管理数据库。

如果我为每个城市使用不同的数据库,那么用户将无法登录到其他城市,因为他们的登录详细信息存储在他们在db的用户表中注册的城市中。

这可能不是问题,因为内容是特定于城市的,例如craigslist。 但是,如果他们希望联系其他城市的用户,他们就无法做到。

此外,整体上会有重复的用户名和电子邮件地址,因为用户可以使用相同的电子邮件和用户名在所有城市注册。

如果我创建一个中央数据库,例如,一个用户表和一个消息表,然后为每个城市创建一个单独的数据库以及所有那些城市的帖子',那么当显示基本信息时,我需要咨询特定的城市db加上存储用户信息的中央数据库。

或者,我可以将所有内容存储在一个数据库中,并将登录用户的位置存储在cookie中,将其传递给会话变量,并在显示搜索结果等时将该位置用作数据库查询的一部分。

但是,这不会给每个查询增加不必要的开销吗?

e.g。每次搜索都必须添加'AND location = $ user_location'。

我真的不知道这里最好的方法是什么。

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:0)

您似乎仍然不清楚要构建的系统。在开始为此系统设计数据库之前,请确保您具有系统要求的完整描述。一些帮助您澄清的示例问题是:

  • 您的网站提供哪些功能?
  • 使用您系统的用户可以执行的所有操作是什么?每次行动都有限制吗?

与系统性能相关的其他一些问题: - 您希望使用多少用户的系统? - 应该为每项行动提供多快和正确的服务?经常使用哪些动作?

在没有仔细了解系统要求的情况下设计系统是没有意义的。

答案 1 :(得分:0)

以下是示例数据库设计以及它如何支持您的需求。

Cities(cityid, cname)
Users(userid, fname, lname, cityid, currcityid)
Messages(mid, senderid, receiverid, content)
Adverts(aid, title, content, userid, cityid)

当用户切换城市时,请更新currcityid表格中其行中的Users字段。

当用户在城市上发布广告时,请在Adverts表格中插入新行。新行的useridcityid是相应用户和城市的ID。

当用户向系统中的另一个用户发送消息时,向Messages表添加一行。新行的senderidreceiverid是相应用户的ID。

查询城市中的所有广告:SELECT * FROM Adverts WHERE cityid = $cityid

查询用户的所有广告:SELECT * FROM Adverts WHERE userid = $userid

查询特定城市中用户的所有广告:SELECT * FROM Adverts WHERE cityid = $cityid AND userid = $userid

希望这有帮助。