Ist meine Struktur in Ordnung?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo :)
ich archiviere seit einiger Zeit Nachrichten von verschiedenen Feeds für den Privatgebrauch. Dabei werden die Nachrichten in einer MySQL Datenbank gespeichert. Mittlerweile sind rund 100.000 Nachrichten von 70 deutschsprachigen Feeds in der Datenbank und die Datenbank wächst täglich. Das gibt mir den Grund die Struktur der Datenbank von euch mal überprüfen/ ggf. korrigieren zu lassen.

(Ich habe jetzt die Druckansicht der Struktur blind aus phpMyAdmin rauskopiert, in ne html-Datei gepackt und hochgeladen.)
Ihr könnt euch die Datenbank Struktur hier ansehen.
BlackJack

@microkernel: Ich sehe da die Felder für eine Tabelle, die anscheinend Fremdschlüssel enthält!? Ich weiss nicht ob man das Struktur nennen kann. Wo ist der Rest?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

@BlackJack
Richtig erkannt. Ich hatte vergessen die anderen Tabellen in die Übersicht mit einzubeziehen :/ Habs jetzt korrigiert...
Allerdings ging es mir primär erstmal um die logische Struktur der 'news'-Tabelle ('Haupttabelle'). Sprich ob sie sinnvoll aufgebaut ist und etc.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

microkernel hat geschrieben: Allerdings ging es mir primär erstmal um die logische Struktur der 'news'-Tabelle ('Haupttabelle'). Sprich ob sie sinnvoll aufgebaut ist und etc.
Die Struktur einer relationalen DB erkennt man aber erst, wenn man die Fremdschlüsselbeziehungen kennt - alles andere ist mehr oder minder nichtssagend; bei den reinen Datentypen kann man imho nicht besonders viel falsch machen. Zudem lassen die sich in der Regel nachträglich leicht ändern.

Worin unterscheiden sich `links` und `feeds`? Wieso benötigst Du da zwei verschiedene Tabellen?

Mich wundert ein wenig, wie Du auf die Länge der `varchar`-Felder gekommen bist. Einige sind auf 100 andere auf 200 Zeichen begrenzt, wieder einer hat den Typen `text`. Im Zweifel würde ich da ein wenig konsolidieren, sofern die Begrenzungen da nicht durch Standards zustande gekommen sind.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hyperion hat geschrieben:Worin unterscheiden sich `links` und `feeds`? Wieso benötigst Du da zwei verschiedene Tabellen?
Vielleicht sollte ich erstmal erklären wofür die Tabellen stehen.
Ich denke mal, dass der Sinn der 'news'-Tabelle relativ klar ist. Die Nachrichten verschiedener Feeds werden mit dem Titel, einer Zusammenfassung und anderen Infos gespeichert. Die Spalte 'summary' ist deshalb auf 'text' gesetzt, da die Länge der Zusammenfassungen der Feeds immer stark schwanken. Die Titel der einzelnen Nachrichten sind jedoch meist von (relativ) gleicher länge - deshalb hatte ich diese Spalte auf 'varchar(200)' gesetzt.
Die Spalte 'link' verweist auf die Tabelle 'inks', wo der Link zu den eigentlich Beitrag des Feeds, mit genaueren Infos gespeichert wird. Die Spalte 'feed' verweist jedoch auf die Tabelle 'feeds' wo genauere Infos zu dem Ursprungs-Feed gespeichert sind.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wo ist denn der Unterschied zwischen `link` und `homepage` in der Tabelle `feeds`?

Generell würde ich eine 1:n Beziehung zwischen einem Feed und einem Beitrag eines Feeds sehen - was ja eigentlich Deine News-Tabelle macht. Insofern kann ich die Struktur nicht so wirklich nachvollziehen. Aber vielleicht habe ich einfach noch nicht kapiert, was Du genau abbilden willst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten