【发布时间】:2013-02-01 20:38:44
【问题描述】:
我有一个名为assets 的表,其中资产可以属于一个用户、团队或部门,并且可能属于每个用户、团队或部门的多个。我的问题是资产是高度可变的,并且可能具有与它们相关联的属性,每个属性都不同。
例如。这些可能是资产:
1.)
type:workbench
cost:200
vendor:Acme Co.
color:black
2.)
type:microscope
serial_no:BH-00102
purchase_date:1337800923
cost:2040
这可能会持续到成百上千种不同类型的资产。
如何以易于查询的标准化方式存储此类数据,而无需在每次添加新资产类型时更改我的表?一些字段也存在于所有资产中,例如成本。
到目前为止,我认为我应该拥有:
assets
id,cost,purchase_date,asset_type_id
asset_types
id,name
division_assets
division_id,asset_id
user_assets
user_id,asset_id
但我不知道将变化的数据放在哪里
【问题讨论】:
-
一个属性可以与资产数量相关吗?
-
某些属性适用于所有资产,但所有其他属性不适用于个别资产类型。
-
你要搜索那些变量属性吗?另外,请阅读EAV
-
如果你使用 Postgres,你可以使用 hstore 模块,它非常有效。
-
@TiagoMartinsPeres:在 2022 年,使用
jsonb可能会更好
标签: mysql sql normalization rdbms