danke!
so gehts:
    var SQL_INSERT_MITARBEITER = "insert into mitarbeiter (name) select $name where not exists (select 1 from mitarbeiter where name = $name );";
    var SQL_SELECT_USER_MITARBEITER_ID = "select user_id, mitarbeiter_id from user, mitarbeiter where user.email = $email and mitarbeiter.name = $name;";
    var SQL_INSERT_USER_MITARBEITER = "insert into user_mitarbeiter (user_id, mitarbeiter_id) select $user_id, $m_id where not exists (select 1 from user_mitarbeiter where user_id = $user_id and mitarbeiter_id = $m_id);";
    var SQL_INSERT_SKILL = "insert into mitarbeiter_skill (mitarbeiter_id, skill, subskill, nivau) values ($m_id, $skill, $subskill, $nivau);";
    var SQL_UPDATE_SKILL = "update mitarbeiter_skill set nivau=$nivau where mitarbeiter_id = $m_id and skill = $skill and subskill = $subskill;";
    
    this.generateOneUpdate = function(email, data) {
       var db = new sqlite3.Database(dbRef);
    
       var pro = function() {
           new Promise(function(resolve, reject) {
        
            var st = db.prepare(SQL_INSERT_MITARBEITER);
            
          st.run({ $name: data.name },
                 function(err) {
                    if (err) {
                       reject({ success: false, dbError: err, msg: "msg1" });
                    }
                    else {
                       resolve();
                    }
                 });
        st.finalize();
       })
       .then(function() {
          return new Promise(function(resolve,reject) {
              
              var st = db.prepare(SQL_SELECT_USER_MITARBEITER_ID);
              
             st.get({ $email: email, $name: data.name },
                    function(err, row) {
                       if (err)
                          reject({ success: false, dbError: err, msg: "msg2" });
                       else
                          resolve(row);
                    });
            st.finalize();
          });
       })
       .then(function(umaRow) {
            if (umaRow == null) {
             reject({success: "msg2"});
            } else {
             return new Promise(function(resolve, reject) {
                 
                 var st = db.prepare(SQL_INSERT_USER_MITARBEITER);
                 
                st.run({ $user_id: umaRow.user_id, $m_id: umaRow.mitarbeiter_id },
                       function(err) {
                          if (err)
                             reject({dbError: true, err: err, msg: "msg3"});
                          else
                             resolve(umaRow);
                       });
                st.finalize();
            });
            }
       })
       .then(function(umaRow) {
            if (umaRow == null) {
             reject({success: "msg4"});
            } else {
             return new Promise(function(resolve, reject) {
                 
                 var st = db.prepare(SQL_UPDATE_SKILL)
                 
                st.run(
                       { $m_id: umaRow.mitarbeiter_id, $skill: data.skill, $subskill: data.subskill, $nivau: data.nivau},
                       function(err) {
                          if (err)
                             reject({dbError: true, err: err, msg: "msg5"});
                          else
                             resolve(umaRow);
                       });
                st.finalize();
            });
            }
       })
       .then(function(umaRow) {
           if (umaRow == null) {
             reject({success: "msg6"});
            } else {
             return new Promise(function(resolve, reject) {
                 
                 var st = db.prepare(SQL_INSERT_SKILL);
                 
                st.run(
                       { $m_id: umaRow.mitarbeiter_id, $skill: data.skill, $subskill: data.subskill, $nivau: data.nivau },
                       function(err) {
                          if (err)
                             reject({dbError: true, err: err, msg: "msg7"});
                          else
                             resolve(umaRow);
                       });
                st.finalize();
            });
            }
       })
       .catch(function(err) {
          if (err.success) return;
          if (err.dbError) {}
          else if (err.msg) {} 
       });
       }
       
       pro();
       db.close();
    }
ich werd mir jetzt das löschen vornehmen.
idee:
ich speichere alle mitarbeiter_ids die zur user_id gehören vor aufruf von generateoneUpdate in einem arrray old_m. im anschluss führe ich die funktion generateOneUpdate aus und speichere alle neuen mitarbeiter_ids in einem array aktuell_m. danach lösche ich alle daten die zu den mitarbeiter_ids aus old_m gehören und die nicht in aktuell_m vorkommen.
übrigens:
manchmal muss ich die seite zweimal laden damit mir die daten die ich haben will vom server aus der db ausgelesen und an den client geschickt wurden. woran liegt das?
 nicht angemeldet
 nicht angemeldet Rolf B
 Rolf B