【问题标题】:Creating a database model with categories and multiple features创建具有类别和多个特征的数据库模型
【发布时间】:2013-11-22 11:46:39
【问题描述】:

我正在建立一个对地方进行评分的 Rails 网站。

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

实现这一点的 Rails 方法是什么?

  • 我应该有单独的年龄组表还是让它们成为 地方表本身?
  • 如何将要素与地点相关联? 我应该有一个单独的表,如下所示(PlacesFeatures 表)吗?

我正在使用 SQLite 进行开发,并且将使用 postgres(在 Heroku 上)进行生产。


这是我想到的表结构(表和列):

放置桌子:

INTEGER id 
STRING name
INTEGER category_id
STRING address
FLOAT rating

分类表:

INTEGER id
STRING name

特征表:(该表格将显示每个类别的特征,通过查询此表来选择)

INTEGER id
STRING name
INTEGER category_id

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

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

一个地方条目将通过表单提交创建。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您应该在 Places 表或单独的 PlacesAgeGroups 表中具有布尔标志,如下所示:

    PlacesAgeGroups 表:

    INTEGER id
    INTEGER place_id
    INTEGER age_group_id
    

    年龄组表:

    INTEGER id
    INTEGER description
    

    同样,PlacesFeatures 应该有对特征的引用,每条记录一个特征。

    PlacesFeatures 表:

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

    【讨论】:

    • 谢谢!这听起来是个不错的方法。我将有一张单独的桌子供年龄使用。我会尝试实现这个,看看我是否遇到任何困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2019-10-27
    相关资源
    最近更新 更多