使用类别和多个功能创建数据库模型

时间:2013-11-10 18:30:15

标签: ruby-on-rails activerecord database-design relational-database

我正在建立一个评估地点的铁路网站。

每个地方都属于一个类别。每个类别都有许多功能。因此,一个地方只能属于一个类别,但可以选择其中的许多功能。如果一个地方属于类别1,那么它只能拥有类别1的(1个或多个)特征而不是其他任何东西。 每个地方都有年龄组。

实现这一目标的轨道方法是什么?

  • 我是否应该为年龄组提供单独的表格或让他们成为年龄组的一部分 放置表本身?
  • 如何将功能与地点相关联? 我应该有一个单独的表,如下所示(PlacesFeatures表)?

我正在使用SQLite for dev&将使用postgres(在Heroku上)进行制作。


这是我想到的表格结构(表格及其列):

放置表格

INTEGER id 
STRING name
INTEGER category_id
STRING address
FLOAT rating

类别表:

INTEGER id
STRING name

功能表(表单将显示通过查询此表选择的每个类别的功能)

INTEGER id
STRING name
INTEGER category_id

AgeGroup表:(一个地方可以选择多个年龄段)

INTEGER id
INTEGER place_id
BOOLEAN zero_to_three
BOOLEAN four_to_eight
BOOLEAN nine_to_twelve
BOOLEAN thirteen_above

PlacesFeatures表:

INTEGER id
INTEGER place_id
INTEGER category_id
BOOLEAN feature_1
BOOLEAN feature_2
...
BOOLEAN feature_n

关系:

Place 
   belongs_to :category
   has_many   :age_groups

Category 
   has_many :places
   has_many :features

AgeGroup
   belongs_to :place

Place条目将通过表单提交创建。

谢谢。

1 个答案:

答案 0 :(得分:1)

你应该在Places表中使用年龄组的布尔标志,或者像这样单独使用PlacesAgeGroups表:

PlacesAgeGroups表:

INTEGER id
INTEGER place_id
INTEGER age_group_id

AgeGroups表:

INTEGER id
INTEGER description

同样,PlacesFeatues应该引用特征,每条记录一个特征。

PlacesFeatures表:

INTEGER id
INTEGER place_id
INTEGER category_id # (this is optional, as it's already set in Places table)
INTEGER feature_id