awesome_nested_set의 삽입 구조를 사용한 DB 설계

4483 단어 MySQLRubyRails

중첩 집합 모형이란 무엇입니까


내포된 집합 모델은 주로 데이터베이스에서 내포된 것처럼 분류 등이 있는 아버지, 아들, 손자를 묶을 때 자주 사용하는 저장 방법을 가리킨다.
예를 들어 프로그램에서 분류된 정보를 처리하려고 할 때.
남성 카테고리(부모)에는 상의(아이)와 시계(아이), 상의에는 테라드(손자)가 있다.

도해를 해봤어요.


방금 전의 예를 도해해 보아라.

어떻게 데이터베이스에서 처리합니까


데이터베이스에 이 표를 표현하기 위해 오른쪽과 왼쪽의 번호를 이용한다.
방금 그림에 번호를 표시하였다.
이 번호를 사용하면 어디서부터 어디까지의 분류를 명시함으로써 데이터베이스에서의 처리를 가능하게 한다.
중첩 집합 모델에서 "lft""rgt"열에 왼쪽과 오른쪽의 번호를 저장합니다.
그림으로 말하다
.남자는'lft'→1,'rgt'→9.상의는'lft'→2,'rgt'→6이다
  • 테라드는'lft'→3,'rgt'→5
    문서 레지스트리에 항목을 추가합니다
  • 방법 참고github.

    사용 설명


    이번에github가 쓴 바와 같이category 모형을 제작하여 미니 응용 프로그램을 만들어 보았습니다.
    마이그레이션 ID_create_categories.rb
    class CreateCategories < ActiveRecord::Migration[5.2]
      def self.up
        create_table :categories do |t|
          t.string :name
          t.integer :parent_id, :null => true, :index => true
          t.integer :lft, :null => false, :index => true
          t.integer :rgt, :null => false, :index => true
    
          t.integer :depth, :null => false, :default => 0
          t.integer :children_count, :null => false, :default => 0
          t.timestamps
        end
      end
    
      def self.down
        drop_table :categories
      end
    end
    
    
    [필수 열]
    - parent_id
    - 하위 노드가 상위 노드의 id인지 나타냅니다.가장 큰 부모의 경우에는 비어 있다.
    - lft
    - 이름별로 카테고리 왼쪽의 값을 입력합니다.
    - rgt
    - 이름처럼 여기에도 카테고리 오른쪽의 수치가 추가됩니다.
    [옵션 열]
    - depth
    - children_count
    model
    category.rb
    class Category < ApplicationRecord
      acts_as_nested_set
    end
    
    
    참고 기사
    Rails에서 awesome_nested_집합을 사용하여 계층 구조 만들기
    https://ruby-rails.hatenadiary.com/entry/20150216/1424092796

    좋은 웹페이지 즐겨찾기