2010-05-10 128 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是對的,從那裏開始並建立一些東西。