Datensätzen einer Tabelle mehrere Tags/Kategorien aus anderer Tabelle zuweisen?
Hallo liebe Ninox-Community,
ich bin als Neueinsteiger dabei eine Kontakt-DB aufzubauen. Meine Tabelle Kontakte mit verschiedenen Untertabellen habe ich erfolgreich angelegt und knapp 5000 DS importiert Jetzt würde ich gerne noch bereits bestehende Tags/Kategorien zu den importierten DS in der Tabelle Kontakte importieren. Da es doch einige Tags/Kategorien sind, 169, ist es leider nicht praktikabel die Zuordnung über ein Mehrfachauswahl-Feld zu lösen, da man Werte in dieses ja auch mW nicht importieren kann. Es gibt teilweise Kontakt-DS, denen bis zu 10 Tags/Kategorien zugewiesen sind.
Ausgangslage:
Alle importierten DS der jeweiligen Tabellen (Adressen, E-Mail-Adressen, Telefonnummern, etc.) kann ich über eine eindeutige 'ID (Kontake)' aus meiner alten DB-Lösung zuordnen und verbinden.
Ich habe eine Tabelle 'Kategorien' mit allen 169 Kategorien, jeder DS in 'Kategorien' hat eine 'ID (Kategorie)'. Ich habe eine weitere Tabelle 'Kategorien_Kontakte'. In dieser gibt es insgesamt 10029 DS, diese sind definiert über die 'ID (Kontakte)' und die 'ID (Kategorie). Eine 'ID (Kontakte)' kann, wie oben beschrieben, mehreren 'ID (Kategorie)' zugeordnet sein.
Was ich realisieren möchte:
Im Grunde genommen möchte ich ja N:M-Beziehungen aus der Tabelle 'Kategorien' zu meiner Tabelle 'Kontakte' herstellen (hierfür habe ich auch eine Verbindungstabelle Kategorien_NM angelegt, siehe Datenmodell anbei), zuvor aber die bereits bestehenden Tags/Kategorien aus der Tabelle 'Kategorien_Kontakte' meinen DS der Tabelle 'Kontakte' zuweisen und später dem Nutzer die Möglichkeit geben, Tags/Kategorien den Kontakt-DS in 'Kontakte' über die Tabelle 'Kategorien' zuweisen zu können, so dass die Tabelle 'Kategorien_Kontakte' am besten obsolet wird.
Ich wäre sehr dankbar, wenn mir jemand einen Hinweis hätte, wie ich dies realisieren könnte, ich stehe ziemlich auf dem Schlauch komme mit trial an error einfach nicht mehr weiter.
Besten Dank und schönen Abend,
Jan
4 Antworten
-
Hallo Jan, leider ist mir die genaue Konstellation auch nach mehrmaligem Lesen deiner Beschreibung nicht klar. Du schreibst: "Ich habe eine weitere Tabelle 'Kategorien_Kontakte'. In dieser gibt es insgesamt 10029 DS, diese sind definiert über die 'ID (Kontakte)' und die 'ID (Kategorie)."
Von welchem Typ sind denn diese "ID"-Felder und was steht darin? Die tatsächlichen Datensatz-IDs können es ja kaum sein, da es ja nur eine N:1-Verknüpfung zu 'Kontakte' gibt und zu 'Kategorie' gar keine.
-
Hallo Copytexter,
erst einmal vielen Dank, dass Du Dir meine Fragstellung durchgelesen hast, auch wenn meine Konstellation etwas schwer zu durschauen ist. Ich versuche, den status quo noch einmal zu beschreiben (in der Hoffnung es gelingt mir ;-):
In unserer alten Datenbank hatten wir insgesamt 169 Kategorien. Diese habe ich in die Tabelle 'Kategorien' in Ninox importiert. Jede Kategorie hat eine "ID (Kategorie)", das ist eine Nummer, aus der alten DB. Aus dieser Tabelle soll es dem Nutzer möglich sein, beim Anlegen neuer Kontakte diesen Kategorien (tlw mehr als eine) aus 'Kategorien' zuzuweisen.
Zunächst möchte ich aber den schon bestehenden importierten Kontakten wieder die Kategorien zuweisen, die sie in der alten DB schon inne hatten.
In der alten DB-Lösung hat es sich so verhalten, dass einem Kontakt mehrere Kategorien zugewiesen sein konnten. Beim Export aus der alten Datenbank konnte ich jedem Kontakt alle ihm vergebenen Kategorien zuweisen. Diese Zusammenstellung habe ich dann in der Tabelle 'Kategorien_Kontakte' in ninox importiert. In dieser Tabelle kann also eine "ID (Konatkte)" mehrmals mit verschiedenen "ID (Kategorie)" vorkommen.
Alle ID Felder, die ich angelegt habe, sind vom Typus "Text" und es stehen Zahlen darin, die jeweiligen IDs, das gilt für "ID (Kontakte)" und auch für "ID (Kategorie)"
Nun frage ich mich, ob und natürlich wie, es irgendwie möglich wäre, den vorhandenen Kontakten wieder die Kategorien aus 'Kategorien_Kontakte' zuzuweisen und dann aber auch eine N:M-Verbindung zwischen 'Kontakte' und 'Kategorien' herzustellen.
Ich hätte vermutlich meine Datenstruktur nicht mit den Verbindungen in der Grafik einfügen sollen, da ich ja lediglich mit den verschiedenen Verbindungen rumexperimentiert habe, das hat wohl eher zur Verwirrung beigetragen.
Aktuell sieht mein Datenmodell wie unten aufgeführt aus.
-
Hallo Jan, die Datensatz-IDs bestehen bei Ninox aus einem Buchstaben für die Tabelle und der Datensatznummer. Das sieht z. B. so aus: C23. Dabei handelt es sich um einen Internen Wert mit eigenem Datentyp. Wenn in einem Textfeld "C23" steht, interpretiert Ninox das nicht als ID, sondern als beliebigen String. Datensatzoperationen kann man damit nicht vornehmen. Das vorab zur Erklärung.
Du hast in deinen "ID"-Feldern nun offenbar die Datensatznummern aus 'Kontakte' und 'Kategorien' als Text gespeichert, also bspw. "23". Wenn man die Tabelle kennt, kann man per record() natürlich auch darüber an die entsprechende Datensatz-ID kommen.
Um die Verknüpfungen vorzunehmen, müsstest du zunächst die N:M-Verbindung wieder herstellen, also 'Kategorien_NM' wieder jeweils N:1 mit 'Kontakte' und 'Kategorien' verknüpfen. Dann könnte man mit einer Schaltfläche oder über die Console folgendes Skript laufen lassen:
do as server
for i in select 'Kategorien_Kontakte' do
let myKontaktID := record(Kontakte, number(i.'ID (Kontakte)'));
let myKategorieID := record(Kategorien, number(i.'ID (Kategorien)'));
let newNM := create 'Kategorien_NM';
newNM.(Kontakte := myKontaktID);
newNM.(Kategorien := myKategorieID);
end
end
Wobei du die genauen Bezeichnungen der beteiligten Tabellen und Felder noch mal überprüfen solltest, ob sie exakt mit deinen übereinstimmen. Und falls du nicht in der Cloud, sondern nur lokal mit der Mac-App arbeitest, müsstest du das "do as server" sowie das letzte "end" weglassen.
Alle Angaben natürlich wie immer nach bestem Wissen und Gewissen, aber ohne Gewähr.
-
Hallo Copytexter, vielen Dank für Deine Mühe und das Skript, ich werde es ausprobieren und berichten.
Content aside
- vor 3 JahrenZuletzt aktiv
- 4Antworten
- 552Ansichten