我正在开发一个服装Web应用程序,并希望有关如何在我的mysql数据库中构建数据的建议.
每件产品(服装项目)都会以多种方式进行摄影,让我们称之为"模式".例如,衬衫将被拍照扣扣或解扣,和/或塞入/不藏入.一条裤子将具有不同的可能属性集.我想存储有关拍摄这些物品的方式的信息,以便我以后可以使用该信息以特定方式显示衣物.
因此,一种方法只是将所有可能的属性存储在单个表中,例如:
productId(FK,PK)modeId(PK)isLoose isTuckedIn Size HasSmthUnderneath
其中属性可以是另一个表中定义的值或代码,如果不适用于特定模式,则为NULL.
然后给出一个特定的productId和modeId,我想我可以过滤掉不适用的属性的NULL值,只使用相关的属性.
但是,我不确定这是否是存储这种值的理想方式,因为我会有很多NULL值,例如在一条仅以一种方式拍摄的裤子中.我听说过EAV模型,这个合适吗?
值得注意的是,属性的数量将由我而不是用户决定,并且不应该有很大变化; 并且我的最终目标是提取特定模式的属性,以便我可以在我的应用程序中使用该数据.
对不起,如果有什么不清楚!
我很想拥有以下规范化架构设计
Mode Table id | mode_style --------------- 1 | buttoned 2 | unbuttoned 3 | tucked in 4 | untucked Clothes Table id | name | description ---------------------------- 1 | shirt | mans shirt... 2 | dress | short sleeve Clothes_mm_Mode Table (Junction/Map table) mode_id | clothes_id -------------------- 1 | 1 1 | 2 3 | 3
然后,您可以轻松查询具有解开显示的衣服
SELECT c.id, c.name, c.description FROM Clothes c INNER JOIN Clothes_Mode cm ON c.id = cm.clothes_id WHERE cm.mode_id = 2
如果某些类型的衣服总是以相同的方式显示,即所有衬衫总是有一个按钮和解开的显示,你可以拿出Clothes_mm_Mode
表并介绍一个将模式映射到共模ID的共模模式表
Common_Modes Table id | name | description -------------------------------------------------- 1 | Men's Shirt | Common Modes for a Mens shirt 2 | Women's Shirt | Common Modes for a Womens shirt Common_Modes_mm_Mode Table (Junction/Map table) common_mode_id | mode_id -------------------------------------------------- 1 | 1 1 | 2 2 | 1 2 | 2
然后将每个服装项目与共同模式类型相关联
Clothing_Common_Modes Table clothing_id | common_mode_id ---------------------------- 1 | 1
这种设计的优点在于,当添加新的服装项目时,只需要将一个记录输入到共同模式表中以将该服装项目与服装类型共有的模式相关联.当然,这可以在没有通用模式表的情况下通过将适当的记录插入到Clothes_mm_Mode
新的服装项目的原始表中来处理,但是通过在数据库中建立关系,它将更加突出,可见且更容易保持.