我正在寻找有关多地区网站数据库结构的指导。
我正在建立一个类似于craigslist.com的网站,允许用户在他们的城市发布添加内容。我正在使用MySQL数据库。
我想将区域作为子文件夹链接到子域,例如ca.mysite.com转到mysite.com/ca。
我的问题是,当我想在我的网站上添加另一个城市时,如何管理数据库。
如果我为每个城市使用不同的数据库,那么用户将无法登录到其他城市,因为他们的登录详细信息存储在他们在db的用户表中注册的城市中。
这可能不是问题,因为内容是特定于城市的,例如craigslist。 但是,如果他们希望联系其他城市的用户,他们就无法做到。
此外,整体上会有重复的用户名和电子邮件地址,因为用户可以使用相同的电子邮件和用户名在所有城市注册。
如果我创建一个中央数据库,例如,一个用户表和一个消息表,然后为每个城市创建一个单独的数据库以及所有那些城市的帖子',那么当显示基本信息时,我需要咨询特定的城市db加上存储用户信息的中央数据库。
或者,我可以将所有内容存储在一个数据库中,并将登录用户的位置存储在cookie中,将其传递给会话变量,并在显示搜索结果等时将该位置用作数据库查询的一部分。
但是,这不会给每个查询增加不必要的开销吗?
e.g。每次搜索都必须添加'AND location = $ user_location'。
我真的不知道这里最好的方法是什么。
提前感谢您提供任何帮助。
答案 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
表格中插入新行。新行的userid
和cityid
是相应用户和城市的ID。
当用户向系统中的另一个用户发送消息时,向Messages
表添加一行。新行的senderid
和receiverid
是相应用户的ID。
查询城市中的所有广告:SELECT * FROM Adverts WHERE cityid = $cityid
查询用户的所有广告:SELECT * FROM Adverts WHERE userid = $userid
查询特定城市中用户的所有广告:SELECT * FROM Adverts WHERE cityid = $cityid AND userid = $userid
希望这有帮助。