01-02-2014, 05:13 PM
(Modification du message : 01-02-2014, 05:30 PM par Sephi-Chan.)
Disons que ça c'est le pattern Single Table Inheritence utilisé dans Rails ou .NET.
D'ailleurs dans Rails en suivant ça tu n'as rien à gérer. Et ça me semble être une bonne guildeline pour ne pas faire n'importe quoi.
Par exemple en Ruby avec Rails :
Dans une console Rails (avec PostgreSQL comme base) :
D'ailleurs dans Rails en suivant ça tu n'as rien à gérer. Et ça me semble être une bonne guildeline pour ne pas faire n'importe quoi.
Par exemple en Ruby avec Rails :
class Node < ActiveRecord::Base
belongs_to :map
has_many :neighborhoods, dependent: :destroy
has_many :areas, through: :neighborhoods
scope :crossroads, -> { where(type: 'Crossroad') }
scope :territories, -> { where(type: 'Territory') }
end
class Territory < Node
end
class Crossroad < Node
end
Dans une console Rails (avec PostgreSQL comme base) :
Node.all # SELECT "nodes".* FROM "nodes"
Crossroad.all # SELECT "nodes".* FROM "nodes" WHERE "nodes"."type" IN ('Crossroad')
Territory.last # SELECT "nodes".* FROM "nodes" WHERE "nodes"."type" IN ('Territory') ORDER BY "nodes"."id" DESC LIMIT 1
Territory.create(name: 'Foo') # INSERT INTO "nodes" ("name", "type") VALUES ($1, $2) RETURNING "id" [["name", "Foo"], ["type", "Territory"]]