🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Wie eine Datenbank definieren ?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Wie eine Datenbank definieren ?

Beitrag von anton » Sa 21. Dez 2013, 14:34

Hallo,
als Anfänger stellen sich mir weiterhin Grundsatzfragen ...
Ich probiere mal zu beschreiben, was ich machen will (Garage aufräumen und auch etwas wiederfinden):

- Es gibt mehrere Regale, die nummeriert werden;
- jedes Regal hat mehrere Fachböden, die ebenfalls durchnummeriert werden;
- auf jedem Fachboden können mehrere Behältnisse (Kisten / Schachteln / Ordner) stehen, die Behältnisse sollen beschrieben werden können und der Inhalt angegeben werden können; auch hier wieder durchnummeriert.
- Außerdem soll der Inhalt mit (auch mehreren) Schlagworten versehen werden.

Ein Behältnis könnte also so benannt werden: 1 2 1: Regal 1, Fachboden 2, Behältnis 1

In dem Versuch, Datenbanken zu verstehen, habe ich folgende Tabellen definiert:

- Regale: ID (Ganzzahl, soll automatisch hochgezählt und angezeigt werden); Beschreibung (beliebiger Text); VerIndex (Verknüpfung zu den weiteren Tabellen)
- Fachboden: ID (wie oben); Beschreibung (wie oben); VerIndex (wie oben)
- Behältnis (ID (wie oben); Beschreibung (wie oben); Inhalt (beliebiger Text); VerIndex (wie oben)
- Schlagworte ID (nur interne Verwaltung); Schlagwort (beliebiger Text, jeweils nur ein Begriff)

Verknüpfung der Tabellen: Regale -> Fachboden -> Behältnis -> Schlagworte

Meine Fragen:
Ist die Definition der Tabellen so richtig?
Wie muß ich ein Eingabeformular definieren? Bisher ist mir das mit dem Assistenten nicht gelungen.

Vielen Dank für Hilfe.
anton

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wie eine Datenbank definieren ?

Beitrag von RobertG » Sa 21. Dez 2013, 17:55

Hallo Anton,

die Verbindung der Tabellen ist noch nicht korrekt. Die oberste Kategorie brauch keinen "Verknüpfungsindex" (das heißt im Datenbankchinesisch "Fremdschlüssel"). Dafür muss die Behältnis-Tabelle einen Fremdschlüssel zu den Schlagworten haben.
anton hat geschrieben: - Regale: ID (Ganzzahl, soll automatisch hochgezählt und angezeigt werden); Beschreibung (beliebiger Text); VerIndex (Verknüpfung zu den weiteren Tabellen)
- Fachboden: ID (wie oben); Beschreibung (wie oben); VerIndex (wie oben)
- Behältnis (ID (wie oben); Beschreibung (wie oben); Inhalt (beliebiger Text); VerIndex (wie oben)
- Schlagworte ID (nur interne Verwaltung); Schlagwort (beliebiger Text, jeweils nur ein Begriff)
Das wird also zu
- Regale: ID, Beschreibung
- Fachboden: ID, Beschreibung, Regale_ID
- Behältnis: ID, Beschreibung, Inhalt, Fachboden_ID, Schlagwort_ID
- Schlagworte: ID, Schlagwort
anton hat geschrieben:Wie muss ich ein Eingabeformular definieren? Bisher ist mir das mit dem Assistenten nicht gelungen.
Verbinde die Tabellen entsprechend in Extras → Beziehungen.
Starte den Formularassistenten mit "Regale" als Ersten Formular, "Fachboden" als Unterformular. Leider lässt der Assistent nur ein Unterformular erstellen. Das nächste Unterformular musst Du selbst händisch erstellen. Nutze dafür den Formularnavigator.
Die Schlagworte stellst Du im 2. Unterformular über ein Listenfeld dar. Ein Listenfeld zeigt das Schlagwort an, speichert aber die ID in dem Feld Schlagwort_ID.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Benutzeravatar
lorbass
* LO-Experte *
Beiträge: 627
Registriert: Mo 25. Apr 2011, 18:17

Re: Wie eine Datenbank definieren ?

Beitrag von lorbass » Sa 21. Dez 2013, 18:15

Mein Tipp: Wenn du planst, irgendwann auch noch Keller, Speicher, Gartenlaube, … digital zu verwalten, solltest von vornherein „über“ der Tabelle Regale noch eine Tabelle Standorte vorsehen:

- Standorte: ID, Beschreibung
- Regale: ID, Beschreibung, Standorte_ID
- (weiter wie oben)

Gruß
lorbass

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Wie eine Datenbank definieren ?

Beitrag von anton » So 22. Dez 2013, 15:58

Die Tabellen habe ich neu definiert.
Auch die Bezüge hergestellt.
Das Eingabeformular (nicht schön, aber ...) habe ich definiert.

Mein Problem ist der Umgang mit den Schlagworten:
Es gibt eine zusätzliche, allgemeine Tabelle, in die alle Schlagworte eingetragen sind (immer wenn ein neues erforderlich ist). Das geht auch in der Eingabe.
Bei der Definition des Listenfeldes komme ich nicht weiter bzw. ich mach da was falsch:
Bei der Eingabe kann ich mit dem Listenfeld aus der allgemeinen Schlagwortliste auswählen, ich kann aber die dem Behältnis zuzuordnenden Schlagworte in die Schlagworttabelle des Behältnisses nicht abspeichern - Fehler
SQL-Status: 23000
Fehler-Code: -10
Attempt to insert null into a non-nullable column: column: Beschreibung table: Behältnis in statement [INSERT INTO "Behältnis" ( "Fachboden_ID","Inhalt","Schlagwort_ID") VALUES ( ?,?,?)]
Hier habe ich offensichtlich noch nichts verstanden.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wie eine Datenbank definieren ?

Beitrag von RobertG » So 22. Dez 2013, 18:50

Hallo Anton,
SQL-Status: 23000
Fehler-Code: -10
Attempt to insert null into a non-nullable column: column: Beschreibung table: Behältnis in statement [INSERT INTO "Behältnis" ( "Fachboden_ID","Inhalt","Schlagwort_ID") VALUES ( ?,?,?)]
Du versuchst in die Tabelle "Behältnis" einen Datensatz zu schreiben. Diese Tabelle enthält ein Feld "Beschreibung". Diese Feld hast Du in der Tabellendefinition als "Nicht NULL" (darf nicht leer sein) definiert. Vom Formular kommen aber keine Werte für dieses Feld an.
Folgende Möglichkeiten hast Du:
In der Definition der Tabelle das Feld auch als leer zulassen (Eingabe erforderlich → Nein)
In der Definition des Formulars im Reiter "Daten" der Feldeigenschaften dieses Feldes Eingabe erforderlich → Ja setzen. Dann hast Du eine deutschsprachige Fehlermeldung vor dem Speicherversuch.
Grundsätzlich etwas in das Feld eingeben ...

Das Ganze hat nichts mit dem Listenfeld für Schlagworte zu tun, denn da ist offensichtlich ein wert vorhanden (Fehlermeldung führt "Schlagwort_ID" auf).

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Wie eine Datenbank definieren ?

Beitrag von anton » Mo 23. Dez 2013, 12:23

Ja, das Problem habe ich zwischenzeitlich gelöst, ich hatte eine "überflüssige" Tabelle ... es war wohl etwas durcheinander geraten.
Das Listenfeld habe ich auch vollständig definieren können.

Bei einigen Probeeingaben habe ich dann (auch schon) bemerkt, daß ich die Primärschlüssel für die Nummerierung der Fachböden und Behälter nicht gebrauchen kann, diese Schlüssel gelten für die gesamte Tabelle über alle Regale, Fachböden und Behälter hinweg.

Mein Ziel war ja aber:
Der Behälter 1 2 5 ist der Behälter im Regal 1, Fachboden 2, der Behälter 5.
Also brauche ich mindestens in Fachboden und Behälter jeweils einen Zähler.

Dazu wollte ich z.B. in der Tabelle "Fachboden" einen Feldnamen "Nr-Fachboden" mit dem Feldtyp "INTEGER" mit dem Autowert "Ja" eintragen.
Sofort bekomme ich Ärger mit dem Primärschlüssel: Für Nr-Fachboden wird AUTOMATISCH das Symbol für Primärschlüssel eingetragen es ist aber kein Primärschlüssel markiert. Also setze ich den Feldname ID wieder auf Primärschlüssel.
Also meinte ich ich hätte: ID, INTEGER, Auto-Wert JA; Nr-Fachboden, INTEGER, Auto-Wert JA
habe ich aber nicht: Nr-Fachboden, INTEGER, Auto-Wert ist automatisch auf NEIN geändert!
Abspeichern gelingt nicht, da gibt es wieder eine Fehlermeldung!

Was mache ich falsch?

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Wie eine Datenbank definieren ?

Beitrag von anton » Mo 23. Dez 2013, 18:45

Im Moment habe ich es aufgegeben, die Nr_Fachboden als Interger-Zahl automatisch hochzuzählen, das geht anscheinend nicht. Muß ich also selbst bei der Eingabe kontrollieren. Oder kann ich doch doppelte Ziffern verhindern? Also nicht zweimal die Ziffer 1 - weil ich nicht aufgepaßt habe?

Ein anderes Problem:
Je Behältnis möchte ich nicht nur ein Schlagwort angeben können, sondern mehrere.
Wie mache ich das? - Mehrere Listenfelder eintragen, auf Vorrat 3 oder 5? Oder kann man das anders definieren?
Je Behältnis eine Liste, die von 0 bis n geht. N ist in der Anzahl im Voraus nicht festgelegt. Geht so etwas?

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wie eine Datenbank definieren ?

Beitrag von RobertG » Mo 23. Dez 2013, 20:18

Hallo Anton,

zu Autowert-Feldern: Diese Felder gibt es pro Tabelle grundsätzlich nur 1 Mal. Da "AutoWert" bedeutet, dass die Werte in der Regel von 1 an automatisch aufwärts eingetragen werden, würde ein zweites Feld nur die glichen Inhalte wie das erste Feld haben.
Willst Du ein Feld so definieren, dass es dort keine Doppler gibt, dann kannst Du das über den Indexentwurf der Tabelle machen. Sieh einfach einmal im Handbuch unter dem entsprechenden Stichwort nach.

Mehrere Schlagwort für einen Datensatz - mehrere Datensätze mit gleichem Schlagwort: So etwas ist eine n:m-Beziehung. Da kannst Du am Anfang etwas mit mehreren Feldern machen, aber Du bist dann nicht sicher, dass nicht plötzlich einige Schlagworte doppelt auftauchen. So etwas wird dadurch gelöst, dass eine Tabelle zwischen Deine Tabelle Schlagworte und die Tabelle Behältnis gelegt wird. Diese Tabelle enthält dann nur den Primärschlüssel aus Schlagworte und den aus Behältnis - als gemeinsamen Primärschlüssel. Aus der Tabelle Behältnis kannst Du dann die Schlagworte_ID streichen.

Im Formular baust Du so etwas in das Formular für das Behältnis als Unterformular ein. Dieses Unterformular besteht lediglich aus einem Tabellenkontrollfeld, das ein Listenfeld enthält. Dieses Listenfeld enthält alle Schlagworte. So kannst Du mehrere Schlagworte einem Behältnis zuordnen - aber nicht gleiche Schlagworte mehrmals dem gleichen Behältnis. Steht in den Kapitel "Formulare" im Base-Handbuch.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Wie eine Datenbank definieren ?

Beitrag von anton » Do 26. Dez 2013, 13:48

Hallo,
das mit dem Indexentwurf habe ich einrichten können ... Die bei einem Versuch die gleiche Nummer noch einmal zu vergeben auftauchende Fehlermeldung ... kann man sicher noch verständlicher gestalten, aber das ist jetzt nicht so wichtig.

Die Sache mit den mehreren Schlagworten, die ich einem Behältnis zuordnen will, habe ich bis jetzt nicht einrichten können.
Es gibt jetzt eine zusätzliche Tabelle
"rel_Schlagw_Behältnis" mit den Feldern
Schlagwort_ID, INTEGER
Behältnis_ID, INTEGER
Beide Felder sind als Primärfelder gekennzeichnet.

Als Beziehungen sind eingetragen:
Tabelle "Behältnis" ID zu Tabelle "rel_Schlagw_Behältnis" Behältnis_ID
Tabelle "Schlagwort" ID zu Tabelle "rel_Schlagw_Behältnis" Schlagwort_ID

Ist das soweit richtig?

Im Formular habe ich ein Unterformular "SubForm_Schlagworte" zum Unterformular "Behältnis" eingerichtet.
Wie ich aber nun in dem "SubForm_Schlagworte" das Listenfeld einrichten soll, ist mir nicht klar.
Wenn ich den Listenfeld-Assistenten bediene, erhalte ich zum Schluß ein Listenfeld im Unterformular "SubForm_Schlagworte" - soweit so schlecht, denn ich weiß einfach nicht, wie ich dieses Listenfeld definieren muß.

Eigenschaften
Allgemein
Name: Listenfeld
...
Aufklappbar: Ja
Anzahl der Zeilen: 20
Mehrfachselektion: Nein ?

Daten
Datenfeld: Schlagwort_ID ?
Eingabe erforderlich: Ja
Art des Inhalts: SQL
Listeninhalt: SELECT "Schlagwort", "ID" FROM "Schlagwort"
Gebundenes Feld: 1

Damit kann ich aus den Schlagworten jeweils eines aussuchen, erhalte aber Fehler beim Abspeichern des Datensatzes.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wie eine Datenbank definieren ?

Beitrag von RobertG » Do 26. Dez 2013, 20:18

Hallo Anton,

so weit alles richtig.
anton hat geschrieben: Im Formular habe ich ein Unterformular "SubForm_Schlagworte" zum Unterformular "Behältnis" eingerichtet.
Wie ich aber nun in dem "SubForm_Schlagworte" das Listenfeld einrichten soll, ist mir nicht klar.
Du musst jetzt in dem Subformular am besten ein Tabellenkontrollfeld einrichten und darin das Listenfeld für die Schlagworte haben. Ansonsten stimmen die Einstellungen für das Listenfeld. Da der Assistent das erstellt hat gehe ich einmal davon aus, dass auch die Grundlage für das Formular die richtige Tabelle ist und die Verknüpfung des Formulars zum darüberliegenden Formular korrekt ist.
anton hat geschrieben: Damit kann ich aus den Schlagworten jeweils eines aussuchen, erhalte aber Fehler beim Abspeichern des Datensatzes.
Was für eine Fehlermeldung erhältst Du?
Nach den geschilderten Einstellungen müsste eigentlich der Weg korrekt sein.
Vielleicht stellst Du das Dokument hier einfach einmal zur Verfügung?

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten