0

Doppelte Datensätze vermeiden, bei Nutzung von Zapier

Hier bin ich wieder. 

Ich benutze Zapier um ein Google Form in eine Tabelle von meiner Datenbank übertragen zu lassen, diese Tabelle dient dann als Grundgerüst für Datensätze in anderen Tabellen.

Auch dies lasse ich normalerweise automatisiert mit Zapier ablaufen.

Wie ich schon in einem anderen thread geschrieben habe, baue ich mir gerade eine Datenbank für mein Plattenlabel auf. Das bedeutet in dem Google Form frage ich alle, für einen Vertrag relevanten Daten ab. Da wir aber natürlich auch Artist haben, die mehrere Songs bei uns veröffentlichen, versuche ich nun doppelte Dateneinträge zu verhindern. 

Zur Erklärung: 

Ich habe eine Tabelle Artist_Daten

hier kommt alles relevante wie Name, Adresse, etc rein 

dann habe ich eine Tabelle Songs

wo alle neuen Songs angelegt werden. 

Bei den Songs kommt es zu keiner Doppelung von Datensätzen, aber bei den Artist benötige ich eigentlich eine Überprüfung ob der Artists Datensatz bereits vorhanden ist. 

Da ich aber programmiertechnisch echt keine Ahnung habe, stehe ich hier auf dem Schlauch und hoffe es kann mir jemand helfen. 

19 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Tanja, ich selbst mache es in einer Kunden-DB so, dass ich sämtliche Formulareinträge (via Make) erst mal temporär in einer eigenen Ninox-Tabelle speichere. So können die Daten vor der endgültigen Übernahme inhaltlich auch noch mal auf Vollständigkeit und Plausibilität geprüft werden. Sind sie in Ordnung, werden sie per Button in die Stammdaten-Tabelle übertragen, entweder als neuer Datensatz oder als Update eines bestehenden. Vorteil neben der Möglichkeit zur vorherigen inhaltlichen Überprüfung ist, dass man in Ninox alle Möglichkeiten zur Automatisierung voll ausschöpfen kann und den Prozess immer unter Kontrolle hat.

    Einiges davon, z. B. die Abfrage, ob der Artist in den Stammdaten bereits existiert oder nicht, ließe sich inklusive entsprechender Verzweigung (create/update) vermutlich auch schon mit Zapier machen. Aber das ist wahrscheinlich deutlich komplizierter und mit Sicherheit weniger flexibel. Erfahrungsgemäß kommt es immer wieder zu Tippfehlern, falsch oder unvollständig ausgefüllten Formularen, so dass man die Daten sowieso checken und oft korrigieren muss. Dann ist es m. E. sicherer und effizienter, das in einer eigenständigen Tabelle zu tun statt in den Produktivdaten.

    Nur so als Idee.

    PS: Ein solches Vorgehen macht natürlich nur Sinn, wenn es sich im Durchschnitt nur um wenige Datensätze täglich handelt, die per Formular übermittelt werden.

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo planox,

    die Daten, die ich mit dem Google Form gewinne, landen auch in einer eigenständigen Tabelle. Die Artist-Daten sind nur ein Teil daraus. 

    Für meine Song Tabelle habe ich mit Zapier einen Ablauf gestaltet, der einen neuen Song_Datensatz erstellt, in dem Moment wenn ein neuer Google Form response erfolgt. (zwei aufeinanderfolgende Zapier-tasks)  Das funktioniert soweit auch ohne Probleme. Diese Teildaten im Google Form sind aber wie gesagt einzigartig. 

    Die Artistdaten nun per Button zu übernehmen könnte durchaus auch eine Lösung sein, allerdings  müsste die Abfolge dann ja auch so sein: 

    überprüfe ob Datensatz vorhanden - wenn nein - erstelle neu

    wenn ja - überprüfe ob updates vorliegen - wenn nein kein Eintrag. 

    Damit bin ich aber ehrlich gesagt programmiertechnisch überfordert. 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja  Ach so, du speicherst die eingehenden Formulardaten schon in einer Extra-Tabelle? Umso besser. Den Rest sollte man gut mit Ninox hinbekommen.

      Um konkret zu helfen, müsste man allerdings mehr über das Datenmodell und den Ablauf wissen. Wie sind Artists und Songs in Ninox miteinander verknüpft? Gibt es neben dem Artist-Namen noch ein eindeutiges(!) Feld zur Identifizierung, idealerweise eine Artist-Nr, -ID o. ä.? Und welche Daten werden mit dem Formular übermittelt, die man dann zum Abgleich mit Artist-/Song-Tabelle nutzen könnte? Bezieht sich das Formular auf einen Song oder auf einen Artist? Oder sind es verschiedene Formulare?

      Fragen über Fragen ...😉

      Du könntest aber auch deine Datenbank mit ein paar Demodaten hier hoch laden, damit man mal direkt reinschauen und sich ein Bild machen kann.

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Alsoooooo

    das Google Form beinhaltet Daten zum Song und zum Künstler / den Künstlern

    Die Daten zum Song landen in der Tabelle Song (ebenfalls direkt durch Zapier) und die Daten zum Artist sollen in der Tabelle Artist landen. 

    Hier hat jeder Artist eine eigenständige Artist_Id die direkt bei Anlage des Datensatzes vergeben wird. Weiterhin sind hier Daten zum realen Namen, Adresse, Email, etc untergebracht. 

    Genau diese Daten erfrage ich auch in dem verschickten Form. 

    Song und Artist verknüpfe ich durch Zuordnung des Künstlers zu dem Song. 

    Bei deiner Lösung wäre es so, dass ich einen Button definiere, der nach Aktivierung bestimmte Teile aus dem Google Form in einen neuen Datensatz in der Tabelle Artist überführt. Wichtig ist dann nur vorher die Überprüfung ob es diesen Datensatz bereits gibt. Im Grunde nicht anders als bei deiner Kundendatei. 

    Wenn die Überprüfung nicht stattfindet, hab ich am Ende des Jahres 10 mal den Artist_Datensatz BAF anstatt einmal 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja Ramseger 

      Es mag an mir liegen, aber ich blicke offen gestanden immer noch nicht ganz durch ... 😉

      Um nun aber nicht noch fünf mal nachfragen zu müssen, habe ich auf die Schnelle mal ein einfaches Szenario entwickelt und eine ebenso einfache Datenbank dazu erstellt. Sie enthält drei Tabellen mit den grundlegenden, für den technischen Ablauf relevanten Datenfeldern:

      Tabelle Artist_Daten

      • Artist_Id (Text)
      • Artist_Name (Text)
      • Songs (1:N-Verknüpfung)

      Tabelle Songs

      • Song_Titel (Text)
      • Artist_Daten (N:1-Verknüpfung)

      Tabelle Formulardaten (Datensätze von Zapier aus dem Webformular erstellt )

      • Artist_Id (Text)
      • Artist_Name (Text)
      • Song_Titel (Text)

      In letzterer befindet sich auch der Button, mit dem der jeweilige Datensatz übertragen werden könnte. Dabei wird zuerst anhand der Id oder des Namens abgefragt, ob der Artist existiert und ggf. angelegt. Dann wird der Song abfragt und, sofern er noch nicht existiert, in die Song-Tabelle geschrieben und automatisch dem Artist zugeordnet. Ich habe dabei versucht, verschiedene Fälle zu berücksichtigen (mit/ohne Artist_Id, mit/ohne Artist_Name, mit/ohne Song_Titel), mich ansonsten aber auf das absolute Minimum beschränkt. Zur Überprüfung kannst du danach in die Tabelle Artist_Daten und/oder Songs schauen, ob die Daten korrekt erstellt bzw. zugeordnet wurden.

      Ich hoffe, dass es deinem Datenmodell zumindest ähnelt und sich die Vorgehensweise übertragen lässt. Ansonsten lässt sich vielleicht immerhin daraus ableiten, welche zusätzlichen Informationen zu deiner DB noch erforderlich wären, um noch zielgerichteter helfen zu können.

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Erst mal danke. Ich bin leider immer noch nicht zuhause, daher konnte ich noch nichts hochladen. Schau mir das von dir aber später an und im Zweifel jag ich das Modell von mir noch hoch.
    Das ist das Problem wenn man was im Kopf hat, wie es aussehen soll, bzw wir es funktionieren soll aber nicht programmieren kann.  Super lieb das du es trotzdem versuchst 😉

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja Ramseger Programmieren im engeren Sinne kann hier kaum jemand. Die meisten haben so angefangen wie du. Learning by doing (and asking). Man muss sich nur rantrauen. 👍

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Mutig war ich schon immer :) 

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ich hab jetzt mal einen Blick in deine Beispieldaten geworfen. 

    aber so komm ich nicht parat - da meine Tabellen doch etwas umfangreicher sind. Ich werde mich am Wochenende mal hinsetzen und Teile in eine Beispieldatenbank überführen. Der Part mit den Songs ist nicht notwendig, da ich dies mit Zapier bereits gelöst habe. (Jedes neue Google Form ist automatisch ein neuer Song) Aber ohne das du meine (vermutlich umständliche) Datenbank gesehen hast reden wir aneinander vorbei :) 

    Lieben Danke erst einmal 

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Nach einer schlaflosen Nacht nun ein kurzer Ausschnitt. 

    Ich hab nur die beiden Tabellen nachgebildet um die es hauptsächlich geht. Meine Artist und das Google Form. 

    Wie gesagt die Song Daten benötige ich nicht - es geht mir gerade nur um die Artist Angaben in dem Google Form. 

    Die Angaben zu Spotify und Apple habe ich zur Zeit noch in einer separaten Tabelle, habe aber vor  diese in der Artist Tabelle zu integrieren, daher könnten sie auch überführt werden. 

    Das Problem für mich ist, dass pro Song durchaus mehrere Künstler möglich sind, also im Grunde alle Angaben im Künstlerbereich überprüft und im Zweifelsfall neu erstellt werden müssen. 

    Ich hoffe das hilft weiter. Danke schon mal im Voraus

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja Ramseger Zugegeben, auch mir hat Ninox schon manche schlaflose Nacht bereitet. Allerdings nur im übertragenen Sinn. ;)

      Ich werde mir deine DB nachher ansehen.

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ok, die DB ist jetzt in der Tat sehr stark vereinfacht. Aber das macht's mir natürlich auch leichter. Da es im Formular keine Artist_Id gibt, kann man nur auf Artist_Name abfragen. Davon gibt es allerdings drei. Ich habe jetzt nur den ersten berücksichtigt. Wenn die beiden anderen ebenfalls geprüft werden sollen, muss man die Abfrage halt wiederholen.

      Also, in der Tabelle Google_Form einen Button mit folgendem Code erstellen:

      let me := this;
      let myA := first(select Dashboard_Artist where 'Artists Name' like me.Artist_Name);
      if myA = null then
         if dialog("!", "Artist nicht gefunden. Jetzt anlegen?", ["Ja", "Nein"]) = "Ja" then
            let newA := (create Dashboard_Artist);
            newA.('Artists Name' := me.Artist_Name);
            newA.(Name := me.Real_Name);
            newA.(Adress := me.Adress);
            alert("Artist wurde angelegt.")
         else
            alert("Artist wurde NICHT angelegt.")
         end
      else
         alert("Artist bereits vorhanden.")
      end
      
    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo danke für die schnelle Rückmeldung. Ja die Datenbank ist schon noch ein wenig größer, aber das hier war der Part der für meine Fragestellung wichtig war. 

    Es ist auf jeden Fall immer ein Künstler der vorhanden ist. Aber es gibt halt Songs wo 2 oder 3 Künstler beteiligt sind. 

    Ich werde den Code mal entsprechend umsetzen und im Zweifel schrei ich noch mal.  Bis dahin schönes Wochenende :) 

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Super, danke funktioniert auch in der Ursprungsdatenbank. Hab jetzt den etwas umständlicheren Weg genommen und 3 Button eingebaut, so für jeden möglichen Künstler einen eigenen Button - ab ich seh ja auf den ersten Blick ob dies eine neuer für uns ist und betätige dann nur den für mich relevanten Button. 

    Aber ich hab nun auch hinter die Vorgehensweise geblickt und kann noch weitere Teile aus der Tabelle damit verwerten. 

    Somit hast du mir nicht nur geholfen, sondern warst auch noch Lehrer ;) würde sagen, alles richtig gemacht. 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja Ramseger Das freut mich zu hören.

      Die drei Abfragen ließen sich aber auch in einen Button packen. Im Grunde könnte man obigen Code für Artist1 einfach kopieren, noch mal darunter setzen und nur die Feldbezeichnungen austauschen. Wobei man auch noch abfragen könnte, ob es überhaupt einen 2. Artist gibt. Das sähe dann so aus:

      [...]
      if '2_Artist_Name' then
          let myA := first(select Dashboard_Artist where 'Artists Name' like me.'2_Artist_Name');
          if myA = null then
              if dialog("!", "Artist 2 nicht gefunden. Jetzt anlegen?", ["Ja", "Nein"]) = "Ja" then
                  let newA := (create Dashboard_Artist);
                  newA.('Artists Name' := me.'2_Artist_Name');
                  newA.(Name := me.'2_Real_Name');
                  newA.(Adress := me.'2_Adress');
                  alert("Artist wurde angelegt.")
              end
          else
              alert("Artist bereits vorhanden.")
          end
      end
      

      Für den 3. Artist dann nochmal dasselbe und die "2" durch "3" ersetzen.

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Sieht jetzt bei mir so aus - hab direkt die Socialmedia und Plattformen mit in der Abfrage

    let me := this;
    let myA := first(select Dashboard_Artists where Artists_Name like me.Artist_Name);
    if myA = null then
        if dialog("!", "Artist nicht gefunden. Jetzt anlegen?", ["Ja", "Nein"]) = "Ja" then
            let newA := (create Dashboard_Artists);
            newA.(Artists_Name := me.Artist_Name);
            newA.(Name := me.Real_Name);
            newA.(Adress := me.Adress_Country);
            newA.(Email := me.Email);
            alert("Artist wurde angelegt.")
        else
            alert("Artist wurde NICHT angelegt.")
        end
    else
        alert("Artist bereits vorhanden.")
    end;
    let myA := first(select Platforms where Artist like me.Artist_Name);
    if myA = null then
        if dialog("!", "Platform nicht gefunden. Jetzt anlegen?", ["Ja", "Nein"]) = "Ja" then
            let newA := (create Platforms);
            newA.(Artist := me.Artist_Name);
            newA.(Spotify := me.Spotify_Link);
            newA.(Apple := me.Apple_Link);
            newA.(YouTube := me.YouTube_Link);
            alert("Platform wurde angelegt.")
        else
            alert("Platform wurde NICHT angelegt.")
        end
    else
        alert("Platform bereits vorhanden.")
    end;
    let myA := first(select Socialmedia where Artist like me.Artist_Name);
    if myA = null then
        if dialog("!", "Platform nicht gefunden. Jetzt anlegen?", ["Ja", "Nein"]) = "Ja" then
            let newA := (create Socialmedia);
            newA.(Artist := me.Artist_Name);
            newA.(Facebook := me.Facebook_Link);
            newA.(Instagram := me.Instagram_Link);
            alert("Socialmedia wurde angelegt.")
        else
            alert("Socialmedia wurde NICHT angelegt.")
        end
    else
        alert("Socialmedia bereits vorhanden.")
    end

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    planox. pro

    ich schon wieder :) ; hoffe du läufst jetzt nicht schreiend davon..

    Besteht auch die Möglichkeit nach dem Prüfen ob Datensätze vorhanden sind, auch eine Prüfung durchzuführen, ob bestimmte Dinge verändert werden müssen. 

    Was häufiger schon mal vorkommt ist zum Beispiel eine Adressänderung. 

    Das Feld ist dann ja nicht "Null" es stehen ja Daten drin.

    Schon mal Danke im Voraus 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Tanja Ramseger 

      Ach, ich bin Kummer gewohnt.😉

      Du meinst vermutlich den Fall, dass der Artist bereits vorhanden ist. In dem Fall soll geprüft werden, ob im Formular das Feld 'Adresse' gefüllt ist? Und wenn ja, soll dessen Inhalt mit dem des Ninox-Datensatzes verglichen werden und bei Nichtübereinstimmung die Artist-Adresse in Ninox durch die aus dem Formular ersetzt werden?

      Das wäre durchaus machbar. Wenn man aber davon ausgeht, dass im Formular immer die aktuelleren Daten stehen, dann kann man sich den (aufwändigen*) Vergleich m. E. sparen. Es sollte eigentlich genügen, nur abzufragen, ob das Feld 'Adresse' im Formular überhaupt einen Inhalt hat. Wenn ja, wird es halt übernommen. Das könnte bspw. so aussehen (anstelle des alert mit "Artist wurde NICHT angelegt."):

      if myA = null then
         [...]
      else
         if me.Artist_Adress then
            myA.Adress := me.Adress
         end
      end
      [...]
      

      * Ein Vergleich der Adressen wäre aufwändig, weil die Adresse in einer einzigen Zeile steht und man kaum davon ausgehen kann, dass sie immer auf genau dieselbe Weise eingegeben wird. Vielleicht ist mal die Straße vorne, mal die PLZ, es gibt Tippfehler, zusätzliche Leerzeichen etc. pp.

    • Garden Cactus Records & Publishing GbR
    • Tanja_Ramseger
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Na dann 😉

    aber yep hast recht - im Formular sollte immer der aktuellste Datensatz sein. Danke teste ich Morgen direkt mal aus. 

    Frohen Rest Sonntag noch