不同的产品有不同的规格。产品也分类。如何解除这种需求?任何想法都将受到高度赞赏。例如 -
Sony Xperia ZL
General Features
Form - Touch
SIM - Single SIM, GSM
Software
OS Version - Android OS, v4.1.2 (Jelly Bean)
Operating Freq - GSM - 850, 900, 1800, 1900; UMTS - 2100
Display
Type - TFT Capacitive
Size - 5-inch
LG HD LED Television
GENERAL
Model 47LN5710
Screen Type -
Display Size 47 Inch
VIDEO FEATURES
Aspect Ratio -
Dynamic Ratio -
View Angle 178 Degree
答案 0 :(得分:2)
这取决于你使用它的目的。有一个简单的解决方案,创建一个表,例如'Spec Attributes',只有两列:Product Id,Spec Name,Spec Value。这将是一个简单的解决方案 - 但不提供支持或数据完整性。
更好的解决方案是围绕属性设置一些保护措施。与上面类似,它将涉及一个表,它将你的'列'(即SIM,OS版本)存储为行。我建议使用预定义的属性甚至“类型”来限制您正在使用的属性,以便更容易查询。
例如,
DeviceTypes
DeviceTypeId | Name
01 | Camera
02 | Television
03 | Mobile Phone
Category
CategoryId | Name
01 | General
02 | Video Features
DeviceAttributeTypes
DeviceAttribTypeId| DeviceTypeId | CategoryId |AttributeName | DataType
01 | 01 | 01 | SIM | Varchar
02 | 01 | 01 | Size | NUMBER
03 | 02 | 02 | Display Size | NUMBER
04 | 02 | 01 | Model | Varchar
DeviceAttribut
DeviceId | DeviceAttirbTypeId | Value
13 | 01 | Single Sim, GSM
13 | 02 | 5
14 | 04 | 47LN5710
在此示例中,您将使用您想要的属性和类型对设备类型和类别表进行“硬编码”。这使您可以选择按类型或类别过滤属性。
即。要获取所有设备及其属性的列表,您可以使用下面的查询。然后,您可以在ID或类别或设备类型的名称上添加'WHERE'
SELECT d.DeviceName
, dat.AttributeName
, dar.Value
FROM Device d
LEFT JOIN DeviceAttribute da
ON d.DeviceId = da.DeviceId
LEFT JOIN DeviceAttributeType dat
ON da.DeviceAttribTypeId = dat.DeviceAttribtypeId
要在需要返回属性为列的结果集的地方进行查询,我总是使用; with annotation。 (示例here)