【发布时间】:2010-04-16 15:54:53
【问题描述】:
和很多人一样,我正在寻找Products /Product Properties 数据库架构。我正在使用 Ruby on Rails 和 (Thinking) Sphinx 进行多面搜索。
要求:
- 添加新产品类型及其选项不需要更改数据库架构
- 支持使用 Sphinx 进行分面搜索。
我遇到的解决方案:
(See Bill Karwin's answer)
选项 1:单表继承
真的不是一个选择。该表将包含许多列。
选项 2:类表继承
Ruby on Rails 会在启动时缓存数据库模式,这意味着每当引入新类型的产品时都会重新启动。如果您有一个大小合适的产品目录,这可能意味着数百个表格。
选项 3:序列化 LOB
无需繁重的应用程序逻辑即可进行分面搜索。
选项 4:实体-属性-值
出于测试目的,EAV 运行良好。 However it could quickly become a mess and a maintenance hell as you add more and more options (e.g. when an option increase the prices or delivery time).
我应该选择哪个选项?还有哪些其他解决方案?有没有我忽略的灵丹妙药(哈)?
【问题讨论】:
-
这有点像说给我造一辆可以将 2 个人从这里运送到那里的车辆。哦,如果我想去深海潜水,或者越野,或者飞行,我应该可以不用任何改装就可以使用同一辆车。
标签: database-design entity-attribute-value