nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Schema für CMS in Rails

Von: Steffen Beyer (sbeyer@reactor.de) [Profil]
Datum: 11.07.2007 16:57
Message-ID: <20070711165720.cea5ab00.sbeyer@reactor.de>
Newsgroup: de.comp.lang.ruby de.comp.datenbanken.misc
Moin,

ich weiß nicht, ob solche Entwurfsfragen hier angebracht sind, aber ich
konnte keine passenderen Gruppen finden.

Es geht um ein System zur Pflege von Webseiten. Als DBMS kommt PostgreSQL
zum Einsatz, als Framework Ruby on Rails.

Jede Webseite besteht aus mehreren Elementen (z.B. Text, Bild, Liste,
Container f. weitere Elemente). Es wird auch Elemente geben, die mehrere
Container für weitere Elemente besitzen. Wie lässt sich diese Verknüp
fung
am elegantesten in eine DDL übertragen?

Ich hatte mir überlegt, eine spezielle Join Table zu verwenden, in der
die Einträge gruppiert sind. Auf diese Gruppen-ID wird dann von Seiten
und Elementen verwiesen. Der Zeiger auf ein bestimmtes Element wird durch
einen ID-String gebildet, aus dem sich eindeutig der Element- und damit
der Tabellenname bilden lässt, sowie der entsprechenden numerischen ID.

Das würde dann etwa so aussehen:

Webseite:
create_table :pages do |t|
t.column :parent_id, :integer, :null => false
t.column :position, :integer, :null => false
t.column :container_group, :integer
t.column :page_title, :string
[...]

t.foreign_key :parent_id, :pages, :id,
:on_update => :restrict, :on_delete => :restrict
end

Container:
create_table :containers do |t|
t.column :group, :integer, :null => false
t.column :position, :integer, :null => false
t.column :element_type, :string(64), :null => false
# z.B. 'complex_element'
t.column :element_id, :integer, :null => false
end

add_index :containers, :group
add_index :containers, [ :element_type, :element_id ]

Element:
create_table :complex_elements do |t|
t.column :headline, :string
t.column :body, :text
t.column :images_container_group, :integer
t.column :links_container_group, :integer
end

Das Rails-ORM müsste ich dann erweitern, um mit dieser Art der
Verknüpfung arbeiten zu können.

Wäre schön, wenn das jemand kommentieren würde.

Xpost.

Grüße,
--
Steffen Beyer <sbeyer@reactor.de>

GnuPG key fingerprint: CA00 1611 242B 89D4 E643  E235 05F3 7689 DD3E EB26
Public key available upon request or at http://wwwkeys.de.pgp.net

[ Auf dieses Posting antworten ]

Antworten