2010-05-10 106 views
0

我正在类似于Craigslist的网站上工作,用户可以在不同城市进行发布和销售物品。我的网站和Craigslist之间的一个区别是,您将能够通过邮政编码进行搜索,而不是将所有城市列在页面上。数据库布局帮助

我已经有了邮政编码数据库,它包含了每个城市的所有城市,州,纬度,经度和邮政编码信息。好的,所以要深入了解我需要完成的工作以及我需要帮助的内容:

1.)虽然我有ZIP Code数据库,但它并没有完全适合我的使用。 (我下载了互联网的免费从http://zips.sourceforge.net/

2)我需要帮助建立我的数据库结构(例如:我有多少种不同的表应该使用,我应该如何将它们链接)

我将使用PHP和MySQL。

我们的这些我的想法至今上的数据库如何可以设置:(我不知道这是否会工作,虽然)

场景:

有人去主页和它会告诉他们,“请输入您的邮政编码。”例如,如果他们输入“17241”,则此邮政编码适用于位于宾夕法尼亚州的Newville市。在当前数据库设置下查询将如下所示:

SELECT city FROM zip_codes WHERE zip = 17241; 

查询的结果是“Newville”。现在我在这里看到的问题是,当他们想要在网站的Newville部分发布某些内容时,我必须为Newville城市发布一个完整的表格设置。这里有超过42,000个城市,这意味着我将不得不拥有超过42,000张桌子(每个城市一张桌子),这样就不得不这样做。我想这样做的一种方式是在邮政编码数据库中添加一个名为“city_id”的列,该列将是分配给每个城市的唯一编号。举例来说,纽维尔市的city_id为83.因此,如果有人来纽维尔市上市,我只需要另一张桌子。那一个其他的表将会像这样设置:

CREATE TABLE postings (
posting_id INT NOT NULL AUTO_INCREMENT, 
for_sale LONGTEXT NULL, 
for_sale_date DATETIME NULL, 
for_sale_city_id INT NULL, 
jobs LONGTEXT NULL, 
jobs_date DATETIME NULL, 
jobs_city_id INT NULL, 
PRIMARY KEY(posting_id) 

);

(该供销售job_列名称是类型贴子的类别的用户将能够下单,将会有更多种类的不仅仅是这两个但这只是举例)。

所以现在,当,当有人谈到网站,他们正在寻找的东西买与不卖,他们可以输入自己的邮政编码,17241,例如,这是将要运行的查询:

SELECT city, city_id FROM zip_codes WHERE zip = 17241; //Result: Newville 83 

(请注意,我将使用PHP存储用户在SESSIONS和Cookies中输入的邮政编码以便在整个网站上记住它们)

现在它会告诉他们“请选择您的类别”。如果他们选择类别“待售物品”,那么这是运行和结果排序的查询:

SELECT posting_id, for_sale, for_sale_date FROM postings WHERE for_sale_city_id = $_SESSION['zip_code']; 

将这项工作?

所以现在我的问题是每个人都会这样做吗?我很确定它会,但我不想把这件事情设置,并意识到我忽略了一些东西,必须从头开始。欢迎任何意见和想法,我会倾听任何有想法的人。我真的很感谢提前的帮助:d

+1

这将工作,不要担心麻烦,先建立一个工作基本原型,然后添加功能:) – Konerak 2010-05-10 19:33:51

回答

0
CREATE TABLE postings ( 
posting_id INT NOT NULL AUTO_INCREMENT, 
for_sale LONGTEXT NULL, 
for_sale_date DATETIME NULL, 
for_sale_city_id INT NULL, 
jobs LONGTEXT NULL, 
jobs_date DATETIME NULL, 
jobs_city_id INT NULL, 
PRIMARY KEY(posting_id) 

这不是你问什么,但看到这样的结构告诉我,你需要创建一个相关的表(和查找表中的值以供选择),而不是做事这种方式。如果您在表格中重复列出相同的内容,则需要一张相关的表格。我会张贴和Posting_type(因为你有一个以上的键入您希望每过帐。东西列出更多这样的结构。

CREATE TABLE postings ( 
posting_id INT NOT NULL AUTO_INCREMENT, 
posting_description LONGTEXT NULL, 
Posting_date DATETIME NULL, 
PRIMARY KEY(posting_id) 

CREATE TABLE posting_categories ( 
posting_id INT NOT NULL, 
Category_id int 
Primary Key (posting_id, Category_id) 

CREATE TABLE Categories ( 
category_id INT NOT NULL AUTO_INCREMENT, 
category_description LONGTEXT NULL, 
PRIMARY KEY(category_id) 

这使您可以自由添加尽可能多的类别,只要你喜欢不改变表结构

0

我不会有一组对每种类型上市列,而是一个“posting_type”列:

CREATE TABLE postings (
posting_id INT NOT NULL AUTO_INCREMENT, 
posting_type char(1),    <<<"J"=job,"S"=for sale, etc. 
posting_text LONGTEXT NULL, 
posting_date DATETIME NULL, 
posting_city_id INT NULL, 
PRIMARY KEY(posting_id) 
0

我会在这里考虑的NoSQL解决方案像mongodb。除了城市 - 拉链关系之外,您是否还有任何真正的关系约束条件?

看起来答案不会在这里。

@Konerak是对的,从那里开始并建立一些东西。