Seite 4 von 4

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 12:28
von meego
BlackJack hat geschrieben:*Eine* Beziehung zu `auth.User` ist ja auch kein Problem, aber bei *zwei* führt das halt zu *zwei* Rückverweisen mit dem *gleichen* generierten Namen. An der Stelle muss man bei mindestens einer Beziehung manuell einen Namen für den Rückverweis geben. Am besten aber beiden, weil der automatisch generierte nicht wirklich gut die Beziehung ausdrückt. Oder man gibt an das gar keine Rückrichtung existieren soll, das geht natürlich auch.
@blackjack: Ich dachte mir das so:

Bild

Empfänger: user_id 1
Sender: user_id 3

Wozu benötigt man den related_name?

@DasIch: Danke, ich lasse die Bezeichnungen besser einmal drin. Ich verwende das Tutorial um mein Modell in Django zu transferieren.

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 12:38
von Sirius3
@meego: Du willst vielleicht nicht nur von einer Nachricht wissen, wer sie geschickt hat, sondern von einem Member wissen, welche Nachrichten er alle geschickt hat. Daher gibt es Rückreferenzen. Die werden nicht im Datenbankschema als Felder abgebildet, sondern sind rein logisch. Django generiert automatisch eine Rückreferenz mit dem Namen der Ursprungstabelle. Wenn es aber zwei Rückreferenzen gibt, kann Django keinen automatisch (doppelt vergebenen) Namen vergeben.

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 12:43
von BlackJack
@meego: Wenn man zwei Entitäten in Beziehung setzt hat diese Verbindung ja keine Richtung. Du gibst nur bei einer Klasse die Beziehung an, aber die Rückrichtung kann man ja auch abfragen. Und zwar auf den anderen Objekten über den `related_name`. Gehen wir mal davon aus das die Klasse für die Nachrichten `Message` heisst, dann wären die über das Attribut `messages` auf den `Member`-Objekten verfügbar, zumindest wenn es nur `sender` oder nur `receiver` gäbe. Wenn es beide gibt, dann gibt's genau das Problem aus der Fehlermeldung: es können nicht beide Rückrichtungen den gleichen Namen haben.

Die Tabellennamen sollten eher Einzahl sein, also `message` und `country`, denn genau wie eine Klasse beschreibt wie *ein* Exemplar aussieht beschreibt die Tabellendefinition wie *ein* Datensatz aufgebaut ist. Du solltest Dir vielleicht auch anschauen wie die Spaltennamen von Django generiert werden oder gleich einen UML-Entwurf der Modelklassen-Beziehungen erstellen und dort nicht die Spaltennamen sondern die Attributnamen verwenden. Im Moment sieht das entweder gemischt aus, oder Du hast keine einheitliche Namensgebung für Fremdschlüssel-Spalten.

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 14:54
von jerch
@meego:
Dir ist schon klar, dass das Model `Member` nicht wie von Dir im Diagramm vorgesehen, mit Nachrichten verknüpft ist? Bzw. `Member` keine Beziehung zu `auth.User` hat. Mehr dazu https://docs.djangoproject.com/en/1.8/t ... user-model

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 16:16
von meego
Sirius3 hat geschrieben:@meego: Du willst vielleicht nicht nur von einer Nachricht wissen, wer sie geschickt hat, sondern von einem Member wissen, welche Nachrichten er alle geschickt hat. Daher gibt es Rückreferenzen. Die werden nicht im Datenbankschema als Felder abgebildet, sondern sind rein logisch. Django generiert automatisch eine Rückreferenz mit dem Namen der Ursprungstabelle. Wenn es aber zwei Rückreferenzen gibt, kann Django keinen automatisch (doppelt vergebenen) Namen vergeben.
@Sirius: Danke für die gute und schlichte Erklärung. Gibt es da eine Konvention zur Benennung?

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 16:25
von meego
@blackjack:
BlackJack hat geschrieben:@meego: Wenn man zwei Entitäten in Beziehung setzt hat diese Verbindung ja keine Richtung. Du gibst nur bei einer Klasse die Beziehung an, aber die Rückrichtung kann man ja auch abfragen. Und zwar auf den anderen Objekten über den `related_name`. Gehen wir mal davon aus das die Klasse für die Nachrichten `Message` heisst, dann wären die über das Attribut `messages` auf den `Member`-Objekten verfügbar, zumindest wenn es nur `sender` oder nur `receiver` gäbe. Wenn es beide gibt, dann gibt's genau das Problem aus der Fehlermeldung: es können nicht beide Rückrichtungen den gleichen Namen haben.
Das ist mir jetzt klar. Das hier
Du solltest Dir vielleicht auch anschauen wie die Spaltennamen von Django generiert werden oder gleich einen UML-Entwurf der Modelklassen-Beziehungen erstellen und dort nicht die Spaltennamen sondern die Attributnamen verwenden. Im Moment sieht das entweder gemischt aus, oder Du hast keine einheitliche Namensgebung für Fremdschlüssel-Spalten.
Habe ich nicht ganz verstanden. Beüglich der Namensgebung, bin ich etwas gespalten, ob man da nicht besser eine einprägsame Bezeichnung eintippt (sender/receiver).

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 16:29
von meego
jerch hat geschrieben:@meego:
Dir ist schon klar, dass [..] `Member` keine Beziehung zu `auth.User` hat. Mehr dazu https://docs.djangoproject.com/en/1.8/t ... user-model
@Jerch: Ja, das war mir schon klar. Mal sehen, wie gut ich das verstehe. Danke für den Link.

Re: Warum braucht es SQLAlchemy?

Verfasst: Donnerstag 16. Juli 2015, 17:03
von BlackJack
@meego: Du hast bei Deinen Spaltennamen für Fremdschlüssel mal Namen ohne Zusatz (`sender`), mal mit `id_`-Präfix und mal mit `_id`-Postfix. Ich würde an der Stelle den Datenbankentwurf mit dem ORM machen, denn Django hat da ja Konventionen wie die Spaltennamen zu den Attributen aussehen. Entweder hält man sich da dran oder man muss dann extra immer noch mal angeben wie das Attribut in der Datenbank heisst.

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 09:47
von meego
BlackJack: Django hängt bei den Spalten "_id" für ForeignKeys automatisch an. Hast du das gemeint?
Und du meinst, ich soll gar keine Schemas zeichnen?

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 10:53
von jerch
@meego:
Die Django-App django-extensions kann Dir aus den Modeldefinitionen auch ein ER-Diagramm zeichnen. Mit einem highly sophisticated ER-Diagramm würde ich nur an Django herantreten, wenn es die Datenlage nicht anders zulässt (z.B. bestehende legacy-DB, komplexe Relationen). Ansonsten würde ich zunächst versuchen, es so weit wie möglich mit den ORM-Boardmitteln abzubilden - das erspart Dir einiges an Kopfzerbrechen später auf Pythonseite. Schwierige oder schlecht mit dem ORM realisierbare Abfragen kannst Du dann immernoch per raw-Queries vornehmen.

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 12:07
von BlackJack
@meego: Ich würde bei Verwendung eines ORM, das auch die Tabellen und Spalten erzeugen kann, kein Datenbank-Diagramm erstellen sondern ein Klassendiagramm. Das ist ja letztendlich die Ebene auf der man dann später auch arbeitet.

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 14:36
von meego
Hallo ihr beiden,

Ich denke für mich ist es in erster Linie auch ein Stück weit Auslegeordnung. Bloss aus den Klassen heraus kann ich mir manchmal schlecht vorstellen, wie das alles verknüpft werden soll.

Die Membertabelle (User) werde ich wohl erst einmal zurückstellen, weil sie offenbar Migrationsprobleme verursacht, wenn man sie falsch anlegt.

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 14:54
von noisefloor
Hallo,
meego hat geschrieben: Ich denke für mich ist es in erster Linie auch ein Stück weit Auslegeordnung. Bloss aus den Klassen heraus kann ich mir manchmal schlecht vorstellen, wie das alles verknüpft werden soll.
Wenn du ein ORM benutzt, dann solltest du dich halt auch darauf einlassen. Der Sinn des ORM ist ja, dass man sich eben _nicht_ mit der DB befassen musst.

Außerdem kannst du die Beziehungen doch auch im von blackjack vorgeschlagenen Klassendiagramm sehen.

Gruß, noisefloor

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 15:45
von meego
Hi
noisefloor hat geschrieben: Außerdem kannst du die Beziehungen doch auch im von blackjack vorgeschlagenen Klassendiagramm sehen.
Was für eine Software (Linux) verwendet ihr da?

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 16:00
von BlackJack
@meego: Papier und Bleistift (systemunabhängig!). ;-)

Re: Warum braucht es SQLAlchemy?

Verfasst: Freitag 17. Juli 2015, 18:06
von Kebap
Ein Freund hat mir mal auf Papier gezeigt, wie er von einer Idee über Skizzen zu einem Datenbankmodell kommt. Das war furchtbar einleuchtend und klar, aber online hab ich dazu noch keine guten Anleitungen gefunden.

Re: Warum braucht es SQLAlchemy?

Verfasst: Samstag 18. Juli 2015, 08:55
von noisefloor
Hallo,

wenn male ich auch per Hand. Bei der Konzeptionierung empfinde ich den Overhead einer Software als störend.

Wenn doch per Software gemalt werden soll, dann geht das unter Linux z.B. mit Dia oder Graphviz.

Gruß, noisefloor

Gruß, noisefloor

Re: Warum braucht es SQLAlchemy?

Verfasst: Samstag 18. Juli 2015, 09:27
von meego
Danke für den Bleistiftipp.

Baut man so ein Portal eigentlich aus kleineren Apps auf oder macht man eine (irgendwie wäre es ja toll, wenn alle Model-Klassen an einem Ort definiert werden)?