2014-06-10 64 views
0

假設你正在爲一個網絡存儲器設計一個可搜索的數據庫,有一個像下面這樣的情況:數據庫設計的產品具有多個類別和多個子功能


每個product將有多個不同的categories

例如,將MARKER視爲product

如:相同標誌物可能有其category所有以下三個:

  • TOY
  • 學校文具
  • ART-配件

現在,每個category有一組相應的任意數量的參數(我們稱之爲features)只適用於該類別。

因此,對於其三個product-category表示中的每一個表示,上面的MARKER將具有多個不同的product-feature-names和各自的product-feature-values

例如:我們可能有這些類別爲基礎feature-names和具體產品的feature-values

  • 產品名稱:::分類名::: 特徵1名 = 特徵1值,等
  • MARKER ::: TOY ::: AgeGroup = 6-12有毒 = ChristmasSpecial =
  • MARKER :::學校文具::: BulkAvailability = 沒有
  • MARKER ::: ART-配件::: 使用 = 細拉絲CompatibleSurface = 所有

對於這種情況,最佳/最佳設計是什麼?


我想到的是用三個表,但我不知道這是否是最有效的檢索後的數據(這也許應該在兩個表來完成,甚至只是一個?):

PRODUCT-TABLE

ID,這裏給

CATEGORY-TABLE

ID,fk_product_id,fk_category_name

FEATURE-TABLE

ID,fk_category_id,FEATURE_NAME,FEATURE_VALUE

回答

1

只要有數據庫說什麼是如此。

yn = yes,no 
age_range = 0-4,4-6,6-12,... 
use = Fine-Drawing,Canoeing,... 
surface_group = All,PaperOrSkin,PaperOrWall,... 
PRODUCT(p,n) -- product [p] is named [n] 
TOY(p,AgeGroup,Toxic,ChristmasSpecial,...) 
    -- [p] is a toy for age range [AgeGroup] and whether it's toxic is [Toxic] and whether it's on Christmas special is [ChristmasSpecial] and ... 
SCHOOL-STATIONERY(p,BulkAvailability,...) 
    -- [p] is school stationery and its bulk availability is [BulkAvailability] and ... 
ART-ACCESSORY(p,Use,CompatibleSurface,...) 
    -- [p] is an art accessory with use [u] and is compatible with surfaces in surface group [CompatibleSurface] and ... 

SQL查詢結合了條件和表。查詢的含義是從條件和上面給出的表格含義組合而成的。

請參閱this stackoverflow post from today或在EAV和OTLT上的其他無數人。 Or this.另外,只要瞭解數據庫設計。也許開始here。如果是/否的選擇分離

注意的事情是簡單的:

TOY(p,AgeGroup,...) -- [p] is a toy for age range [AgeGroup] and ... 
TOY-TOXIC(p) -- toy [p] is toxic 
TOY-XMAS-SPECIAL(p) -- toy [p] is on Christmas special 
SCHOOL-STATIONERY(p,...) -- [p] is school stationery and ... 
SCHOOL-STATIONERY-BULK-AVAILABLE(p) -- school stationery [p] is available in bulk 

也許你也想有時不具備的東西羣體標籤,但簡單地陳述有關的事物或第一個和最後的東西範圍:

age = 0,1,2,... 
surface = Paper,Skin,Wall,... 
TOY(p,...) -- [p] is a toy and ... 
TOY(p,MinAge,MaxAge) -- [p] is a toy with age minimum [MinAge] and maximum [MaxAge] 
ART-ACCESSORY(p,Use,...) -- [p] is an art accessory with use [u] and ... 
ART-ACCESSORY-COMPATIBLE-SURFACE(p,CompatibleSurface) -- accessory [p] is compatible with surface [CompatibleSurface] 

您可以隨時更改當前硬連線信息(類型集和類型,列和表名稱)。您始終可以編寫通用查詢,它們甚至不知道什麼是硬連線,因爲所有硬連線名稱都是構成DBMS元數據的表中的值。

相關問題