2014-06-10 71 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元数据的表中的值。

相关问题