80


60


40


20


 0
  2007   2008   2009
Po w ere d by   vs
class Employee < ActiveRecord::Base
  validates_presence_of :name


CREATE TABLE employees (
  name VARCHAR(40) NOT NULL,
class Employee < ActiveRecord::Base
  validates_length_of :login,
                      :minimum => 5


CREATE TABLE emplo...
begin
  emp = Employee.new(:login => '')
  emp.save_with_validation(false)
  fail
rescue ActveRecord::StatementInvalid
end
Departments   Employees
class Employee < ActiveRecord::Base
  belongs_to :department
  validates_presence_of :department


CREATE TABLE employees ...
Companies   Departments   Employees
has_many :though

company.employees.size


SELECT count(*) AS count_all
FROM employees
INNER JOIN departments
   ON employ...
SELECT count(*) AS count_all
FROM employees
WHERE company_id = 1



Companies


                ?
               Departmen...
company_id    department_id




Companies         Departments     Employees
id                id              id
         ...
Companies   Departments     Employees
id          company_id      id
            department_id   company_id
              ...
departments

CREATE TABLE departments(
  company_id INTEGER NOT NULL
    REFERENCES companies(id),
  department_id SERIAL ...
employees

CREATE TABLE employees(
  company_id INTEGER NOT NULL
     REFERENCES companies(id),
  department_id INTEGER NO...
departments                       company_id
 department_id                   employees


 Companies       Departments    ...
# gem install composite_primary_keys
Department

class Department < ActiveRecord::Base
  set_primary_keys :company_id,
                   :department_id

 has_...
Company

class Company < ActiveRecord::Base
  def employees_size
    Employee.count(
      :conditions =>
        ['compan...
CREATE VIEW big_campanies AS
SELECT * FROM companies WHERE id IN
  (SELECT company_id FROM
    (SELECT compay_id, count(id...
BigCampany




class BigCampany < ActiveRecord::Base
  has_many :department
end
SELECT * FROM (SELCT * FROM ...)
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ
Upcoming SlideShare
Loading in …5
×

『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ

6,614 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,614
On SlideShare
0
From Embeds
0
Number of Embeds
896
Actions
Shares
0
Downloads
61
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

『エンタープライズRails』に学ぶ企業ユーザのためのRailsアーキテクチャ

  1. 1. 80 60 40 20 0 2007 2008 2009
  2. 2. Po w ere d by vs
  3. 3. class Employee < ActiveRecord::Base validates_presence_of :name CREATE TABLE employees ( name VARCHAR(40) NOT NULL,
  4. 4. class Employee < ActiveRecord::Base validates_length_of :login, :minimum => 5 CREATE TABLE employees ( login VARCHAR(10) check(length(login) > 4),
  5. 5. begin emp = Employee.new(:login => '') emp.save_with_validation(false) fail rescue ActveRecord::StatementInvalid end
  6. 6. Departments Employees
  7. 7. class Employee < ActiveRecord::Base belongs_to :department validates_presence_of :department CREATE TABLE employees ( department_id INTEGER NOT NULL REFERENCES departments(id),
  8. 8. Companies Departments Employees
  9. 9. has_many :though company.employees.size SELECT count(*) AS count_all FROM employees INNER JOIN departments ON employees.department_id = departments.id WHERE departments.company_id = 1
  10. 10. SELECT count(*) AS count_all FROM employees WHERE company_id = 1 Companies ? Departments Employees
  11. 11. company_id department_id Companies Departments Employees id id id company_id company_id department_id
  12. 12. Companies Departments Employees id company_id id department_id company_id department_id
  13. 13. departments CREATE TABLE departments( company_id INTEGER NOT NULL REFERENCES companies(id), department_id SERIAL NOT NULL, PRIMARY KEY (company_id, department_id)
  14. 14. employees CREATE TABLE employees( company_id INTEGER NOT NULL REFERENCES companies(id), department_id INTEGER NOT NULL, FOREIGN KEY (company_id, department_id) REFERENCES department (company_id, department_id)
  15. 15. departments company_id department_id employees Companies Departments Employees id company_id id department_id company_id department_id
  16. 16. # gem install composite_primary_keys
  17. 17. Department class Department < ActiveRecord::Base set_primary_keys :company_id, :department_id has_many :employees, :foreign_keys => [:company_id, :department_id]
  18. 18. Company class Company < ActiveRecord::Base def employees_size Employee.count( :conditions => ['company_id = ?', id]) end
  19. 19. CREATE VIEW big_campanies AS SELECT * FROM companies WHERE id IN (SELECT company_id FROM (SELECT compay_id, count(id) AS c FROM employees GROUP BY company_id) AS t WEHRE c > 1000)
  20. 20. BigCampany class BigCampany < ActiveRecord::Base has_many :department end
  21. 21. SELECT * FROM (SELCT * FROM ...)

×