Verständnisfrage zu Content aus Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
overflow
User
Beiträge: 11
Registriert: Sonntag 30. Dezember 2012, 00:18

Einen wunderschönen guten Tag wünsche ich allen Forum-Usern.

Ich experimentiere gerade ein wenig mit Flask und SQLAlchemy und möchte meinen Content aus der Datenbank ziehen.
Folgende Tabellen habe ich bisher definiert:

Bild

Tabelle contenttype: soll alle Typen von Seiten beinhalten wie Landingpage, Produktpage, Blogpage
Tabelle sites: hier sollen alle Seiten angelegt werden.
Tabelle content: hier soll der Content der Seiten angelegt werden. Dabei soll die ID in dieser Tabelle aus der Tabelle sites übernommen werden.
Tabelle seo: Nach dem gleichen Konzept wie bei Tabelle content

Ich habe die Befürchtung, dass es so nicht ganz klappt.
Jede Seite auf einer Webseite kann unterschiedlich viel Content enthalten und unterschiedlich strukturiert sein. Page A kann zweimal eine H2-Überschrift beinhalten, wobei Page B fünf H2-Überschriften enthält.

Vielleicht hat ja jemand ein Denkanstoß für mich.

PS: Das Schema habe ich mit https://dbdiagram.io/d modelliert.

Anbei der Code

Code: Alles auswählen

Table contenttype {
  id integer [pk]
  name string unique
}

Table sites {
  id integer [pk]
  name string unique
  contenttype string
}

Table content {
  id integer [pk]
  sitename string
  headline string
  text text
}

Table seo {
  id integer [pk]
  uri string
  title string
}



Ref: "contenttype"."name" < "sites"."contenttype"

Ref: "sites"."id" < "content"."id"

Ref: "sites"."id" < "seo"."id"
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was soll Content denn umfassen, einfach nur den ganzen Seitentext, dann verstehe ich das mit den Überschriften nicht. Oder ist Content eigentlich Paragraph, also für jeden Abschnitt ein Eintrag. Dann hast Du einfach eine 1:n-Beziehung zur Seite, brauchst aber noch irgendeinen Laufindex, sonst sind die Abschnitte einer Seite ja nicht sortiert.
contenttype in Site muß die ID auf die contenttype-Tabelle sein, kein String.
sitename in Content muß die ID der Site sein, kein String.

Seo hat noch gar keine Verknüpfung, daher kann ich da nicht sagen, was Du da wie speichern willst.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

overflow hat geschrieben: Mittwoch 26. Januar 2022, 10:23 Jede Seite auf einer Webseite kann unterschiedlich viel Content enthalten und unterschiedlich strukturiert sein. Page A kann zweimal eine H2-Überschrift beinhalten, wobei Page B fünf H2-Überschriften enthält.
Das finde ich merkwürdig. Es liest sich so als würdest du HTML-Passagen in der Datenbank speichern.

Die Datenbank sollte die *Daten* enthalten. Beim Aufbau der Seite werden Daten in ein HTML-Template geladen, welches nicht in der Datenbank gespeichert ist.
Die klare Trennung von Daten und Visualisierung fehlt mir bei diesem Konzept. Aber vielleicht ist es nur ein Missverständnis.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum ist contenttype zwar mit einer ID versehen, aber sites referenziert stattdessen per name darauf? Dann ist die ID doch wahlweise ueberfluessig, oder schlimmstenfalls kann das ganze fehlerhaft gespeichert werden.
overflow
User
Beiträge: 11
Registriert: Sonntag 30. Dezember 2012, 00:18

Ich habe mal eine Demo Seite herausgesucht:

https://demo.gruender.de/ddb/platin/lan ... -software/

Die Überschrift dort müsste ich doch in einem Feld abspeichern sowie die 3 Bereiche für die Benefits.
Daraus würden sich doch 4 Felder in der Table Content ergeben oder nicht?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

CMS Modellierung ist nicht trivial. Was bei dir zB komplett fehlt ist die Ordnung der Elemente untereinander - ein Feld, in dem SQL notorisch schwach ist. Denn es hat keine natuerlich Ordnung, und der Aufwand, eine durch Aufzaehlung herzustellen, ist durchaus signifikant. Darum ist es zB fraglich, ob SQL ueberhaupt zum Einsatz kommen sollte, zumindest auf dieser granularen Ebene. Es koennte deutlich besser sein, die Dokumente als zB HTML, JSON, XML Blob zu speichern. Und die Beantwortung dieser und anderer Fragen haengt auch an der Art und Weise, wie die Eintraege gepflegt werden sollen.

Rein aus einer pragmatischen Perspektive, wenn's nicht um lernen geht, sollte man lieber auf bestehende Loesungen zurueckgreifen. ZB DjangoCMS, etc.
overflow
User
Beiträge: 11
Registriert: Sonntag 30. Dezember 2012, 00:18

__deets__ hat geschrieben: Mittwoch 26. Januar 2022, 11:12 CMS Modellierung ist nicht trivial. Was bei dir zB komplett fehlt ist die Ordnung der Elemente untereinander - ein Feld, in dem SQL notorisch schwach ist. Denn es hat keine natuerlich Ordnung, und der Aufwand, eine durch Aufzaehlung herzustellen, ist durchaus signifikant. Darum ist es zB fraglich, ob SQL ueberhaupt zum Einsatz kommen sollte, zumindest auf dieser granularen Ebene. Es koennte deutlich besser sein, die Dokumente als zB HTML, JSON, XML Blob zu speichern. Und die Beantwortung dieser und anderer Fragen haengt auch an der Art und Weise, wie die Eintraege gepflegt werden sollen.

Rein aus einer pragmatischen Perspektive, wenn's nicht um lernen geht, sollte man lieber auf bestehende Loesungen zurueckgreifen. ZB DjangoCMS, etc.
Jetzt bin ich an einem Punkt, wo ich nicht weiß wie und wo ich weiter machen soll. Schaue mir mal DjangoCMS an. In Flask scheint es noch keine CMS'e zu geben.
Antworten