2010-01-20 56 views
1

在分類廣告網站,您有幾個類別(汽車,多媒體,房屋等)。 對於選擇的每個類別,隱藏的div將變得可見,並顯示用戶可能指定的其他選項(如果他/她希望的話)。這個MySQL數據庫可以被改進,或者它是好的嗎?

我現在創建一個數據庫,我也瞭解正常化的一些文章,使之優化等..

這是今天我的上籃

類別表:
- 汽車
- MC
- 房屋

分類的表格:
- 標題
- 描述
- hide_telephone_nr
- 多變
- 行動
- 價格
- modify_date

海報表:
- 姓名
- PASSW
- 電話
- 電子郵件

範圍表:
- 面積
- 社區

CARS表:
- 年
- 燃料
- 變速箱
- 色

MC表:
- 年
- 類型

HOUSE表:
- 別墅
- 公寓
- 大小
- 客房

我到目前爲止有一個表中的每個類,以便讓大約30桌。 這不是太多嗎?

我還沒有任何一項創建PK或FK到目前爲止,還沒有得到那麼遠,...

你能告訴我,如果這個設置是好,或者我應該有它有不同的?

此外,你會如何設置FK和PK?

感謝

+0

聞起來像家庭作業? :) – Younes 2010-01-20 09:59:49

+0

它也是根據http://stackoverflow.com/questions/2093183/is-there-any-tool-sw-to-help-me-build-a-good-database/2093296#2093296 – Fionnuala 2010-01-20 11:06:21

+1

我想知道爲什麼ms-access是作爲標籤嗎? – 2010-01-20 21:24:14

回答

1

從我的理解,我會做一個表的所有類別和存儲類別的姓名和ID那裏。接下來,我將創建一個單獨的表來存儲每個類別的附加選項。

MySQL Table 1 
---------------- 
Category_ID int PRIMARY KEY 
Category_name varchar 

MySQL Table 2 
---------------- 
Category_ID int 
Entry_Number int PRIMARY KEY (this will keep track of which entry everything belongs to) 
Additional_Option varchar 
Additional_Option_Answer varchar (this is the one that stores what your user clicks/inputs) 

例如,使用:

POSTER TABLE: 
- name 
- passw 
- tel 
- email 

你會存儲CATEGORY_ID這個數據是在Category_ID和存儲namepasswtelemail到它自己的行Additional_Option和用戶對這些標準的投入將存儲在Additional_Option_Answer

CATEGORY_ID爲Posters將是1和Area將是2

它應該是這樣的,如果第一個用戶補上一:

--------------------------------------------------------------------------------------------- 
Category_ID | Entry_Number | Additional_Options | Additional_Options_Answers 
--------------------------------------------------------------------------------------------- 
     1  | 1    | name     | doug 
     1  | 1    | passw    | 1234 

它看起來如果第二個這樣的用戶添加了一些東西:

--------------------------------------------------------------------------------------------- 
Category_ID | Entry_Number | Additional_Options | Additional_Options_Answers 
--------------------------------------------------------------------------------------------- 
     1  | 2    | name     | Hamlet 
     1  | 2    | passw    | iliketurtles 

此外,讓我們應用另一個類別:

AREA TABLE: 
- area 
- community 

--------------------------------------------------------------------------------------------- 
    Category_ID | Entry_Number | Additional_Options | Additional_Options_Answers 
    --------------------------------------------------------------------------------------------- 
      2  | 3    | area     | San Francisco 
      2  | 3    | community   | community_name 
+0

請澄清,這就是我所做的,因爲你可以看到上面...解釋更多 – pesar 2010-01-20 08:58:27

+0

我希望澄清它更好:) – Strawberry 2010-01-20 09:29:03

+0

因此,用戶只將數據插入到最後一個表,值表右?我知道了!即:CARS - > YEAR - > INSERTED VALUE(ex 2010)? – pesar 2010-01-20 13:23:47

0

您可以通過使用表名中的數據來識別類別表的問題。每個類別都有表格的問題主要不是你得到很多表格,但是如果你添加另一個類別,你必須改變數據庫設計。另外,當您需要根據數據選擇表格時,查詢數據庫非常困難。

您應該爲發佈屬性而不是每個類別使用一個表格。由於每個類別的屬性不同,因此您還需要一個表格來描述每個類別使用的屬性。

描述主要對象(類別,分類,海報,區域,屬性)的表格將獲得主鍵。其他表只需要外鍵,因爲它們是對象之間的關係。

Category (CategoryId, CategoryName) 

Classified (ClassifiedId, PosterId, AreaId, ...) 

Poster (PosterId, ...) 

Area (AreaId, AreaName, ...) 

Property (PropertyId, PropertyName) 

CategoryProperty (CategoryId, PropertyId) 

ClassifiedProperty (ClassifiedId, PropertyId, Value) 
+0

好的,我想我明白了......你能否再解釋一下第二段,我怎麼能「描述哪個屬性用於每個類別」......一些例子會是很棒的Guffa! – pesar 2010-01-20 09:14:55

+0

CategoryProperty表你會得到knw每個類別的屬性。 – 2010-01-20 09:36:05

+0

@pesar:CategoryProperty表包含一個類別的屬性。例如,對於「MC」類別,將有兩行,一個用於「Year」屬性,另一個用於「Type」屬性。分類在「MC」類別中的ClassifiedProperty表中將包含兩行,其中包含兩個屬性的值。 – Guffa 2010-01-20 10:06:05

0

首先,您需要爲每個表創建主鍵。通常,最好的方法是使用名爲id或tablenameId的順序標識字段。這非常重要。與數據關聯的主鍵在數據更改時會導致問題。

category (id PK, name) 
category_options (id PK, category_id FK->category.id, option_name) 

所以這一類表將有價值觀像

(1, car) 
(2, MC) 

和期權將有一個像

(1, 1, year) 
(2, 1, fuel) 
(3, 2, type) 

然後,你需要其中的值實際存儲並鏈接到一個表中的值項目。這隻需要您在查詢一個項目時加入所有3個類別表格。

category_values (id PK, category_options_id FK-> category_options.id, value, classified_id FK->classified.id) 

分類表需要fk給海報和id字段。

classified (id PK, poster_id FK->poster.id, headline, description, hide_telephone_nr, changeable, action, price, modify_date) 

海報表是相當不錯的,因爲它只是爲主鍵添加id字段。我只是認爲它通常被稱爲用戶。

通過category_options_id FK-> category_options.id我的意思是說category_options_id應該有對category_options.id的外鍵引用。

你可以做更多的規範化,如classified.action和classified.changeable,但它也增加了複雜性。

我希望這會有所幫助。

我還必須強調,這不是唯一可能的解決方案,這取決於你如何真正要使用的數據可能不是最好的選擇,但它的工作原理是ATLEAST體面的:)

+0

感謝您的回答。請問,爲什麼你要將(FK)分類表連接到option_values表?我仍然在這裏學習邏輯... – pesar 2010-01-20 13:28:50

+0

'FK->'是什麼?編輯:外鍵。 – Strawberry 2010-01-20 13:32:22

+0

如此分類的表格包含實際銷售的商品和類別表格,其中包含商品可能存在的類別。由於值表具有實際值,因此最好將其與分類表相關聯,因爲存在0-n關係,所以一個項目可以具有0 ... n個分類,並且分類中的項目具有不同的值但具有相同的分類。 我認爲category_values也可能被命名爲classified_category_values(如果有幫助)。也可以將FK從分類列表分類到類別表格,這樣可以更容易思考,但不需要數據完整性。 – Calmar 2010-01-20 19:22:42

0

您的設計非常依賴於基礎產品。你也把不同列中的互斥數據放在一起(例如房子不可能既是別墅也是別墅?)我會用一種更普遍的形式,例如:

Category 
Classified 
Poster 

在OP中,但添加/聲明瞭主鍵。

然後組中的所有類別的特定屬性到一個表 - 像

Std_Tags {id, category, tag} 
{0,Cars,year} 
{1,Cars,fuel} 
{2,house,type} 
{3,house,rooms} 

與另一個表中的值:

classified_tags {std_tags_id, classified_id, value} 
{0,13356,2005} 
{2,109,villa} 
{0,153356,diesel} 

這也簡化了輸入表單建設監守模板是明確並且還通過添加如下表格:

Allowed_values {std_tags_id, value} 
{1,diesel} 
{1,petrol} 
{1,LPG} 
{2,Villa} 
{2,Apartment} 

Th可以使用下拉列表完成大部分數據輸入,符合標準搜索。

C.

相關問題