Stuct oder Tabelle in einem Table anlegen, hab ich was übersehen?



  • Hi,

    ich bin Neuling auf dem Gebiet SQL-Datenbanken. Habe die mich hier bis Kapitel 6 SUM and COUNT durchgearbeitet und nun wollt ich mal eine Tabelle anlegen, da ist mir direkt aufgefallen, dass die Einträge in einer Tabelle nur "primitive" Datentypen sind. Kann ich auch ein eigenen Datentyp anlegen? z.B. eine Liste variabler länge?



  • Es gibt in mysql den Typ "TEXT", der kann beliebig lang sein weil mysql das Feld implizit extern auslagert und verwaltet.



  • Ich kenne sqlzoo nicht allzu gut, aber typischerweise wirst du pro struct eine Tabelle haben. Wenn du dann irgendwelche 1:n-Beziehungen hast, schiebst du die in eine andere Tabelle. Wenn zB. jeder User (id, name, email) beliebig viele Statusnachrichten (id, timestamp, text) hat, dann machst du daraus zwei Tabellen:

    User (id, name, email)
    Status (id, user_id, timestamp, text)
    

    Postgres hat zwar auch HStore, aber aktuell verstehst du vmtl. noch nicht genug um zu wissen, wann das sinnvoll ist, also lass es vorerst lieber bleiben.



  • Danke!
    Alles klar, dann habe ich das soweit verstanden, auch wenn es auf den ersten blick doch schon merkwürdig aussieht. Der User hat in deinem beispiel gar keine Kopplung zum Status, d.h. ich könnte gar nicht wissen wie viele Statusnachrichten er z.B. hat. Erst wenn man beide Tabellen zusammen verwendet bekommt man die gewünschte Information, indem man dann die anzahl der user_id im Status aufsummiert.



  • ach so, es geht um Normalisierung 😮



  • Dudeldu schrieb:

    Der User hat in deinem beispiel gar keine Kopplung zum Status, d.h. ich könnte gar nicht wissen wie viele Statusnachrichten er z.B. hat.

    Wenn du die Statustabelle nicht hast nicht, nein.

    Erst wenn man beide Tabellen zusammen verwendet bekommt man die gewünschte Information, indem man dann die anzahl der user_id im Status aufsummiert.

    Ja, wobei das im Normalfall recht billig sein wird.

    select user_id, count(id) as status_count
    from statuses
    group by user_id;
    

    In vielen Fällen wirst du in der Praxis in solchen Situationen eine extra Spalte in der Usertabelle haben, in der die Anzahl von Statusnachrichten drinstehen. Aber als Anfänger würde ich auch darauf fürs Erste einfach mal verzichten.



  • deejey schrieb:

    ach so, es geht um Normalisierung 😮

    Geht es doch bei Einsteigerfragen immer. Ich verstehe ehrlich gesagt auch beim besten Willen nicht, wie du darauf kommst, dass es um TEXT gehen könnte bzw. auf welche Frage das die Antwort sein hätte sollen.


Log in to reply