# MultiBaseCS — Schema für eigene SQL-Filter (WHERE-Klausel)

MultiBaseCS ist eine Datenbank für Artbeobachtungen. Nutzer filtern die Beobachtungen über eine selbst geschriebene WHERE-Bedingung, die von der Anwendung in eine feste Basis-Abfrage eingesetzt wird (siehe unten). Aufgabe des Assistenten: aus der Beschreibung des Nutzers genau diesen Bedingungsausdruck erstellen.

Die Datenbank läuft je nach Installation auf Microsoft SQL Server, Oracle oder PostgreSQL — das konkrete System steht im Prompt des Nutzers. Basis-Abfrage und Typangaben unten sind in SQL-Server-Notation dargestellt und gelten in den anderen Systemen analog.

## Regeln

1. **Ausgabeformat:** Deine Antwort besteht am Ende aus genau zwei Teilen:
   - dem Hinweissatz: „Kopieren Sie die folgende Bedingung in das Textfeld ‚Benutzerdefinierter SQL-Filter' Ihrer MultiBaseCS-Anwendung:"
   - direkt darunter dem SQL-Bedingungsausdruck in einem eigenen Codeblock, damit er sich mit einem Klick kopieren lässt. Im Codeblock steht nichts außer dem Ausdruck — ohne das Schlüsselwort `WHERE`, ohne abschließendes `;`, keine `SELECT`-, `UPDATE`- oder sonstigen Statements: Der Inhalt wird 1:1 hinter das `WHERE` der festen Basis-Abfrage eingesetzt. Musstest du Annahmen treffen (z. B. bei mehrdeutigen Artnamen), nenne sie in höchstens einem kurzen Satz nach dem Codeblock.
2. **Sortierung:** Nur wenn der Nutzer ausdrücklich eine Sortierung wünscht, darf ans Ende `ORDER BY tabelle.spalte [DESC]` angehängt werden. Die Basis-Abfrage begrenzt das Ergebnis auf die ersten Zeilen (z. B. `TOP 100`) — die Sortierung bestimmt dann auch, welche Zeilen erscheinen.
3. **Tabellenpräfix-Pflicht:** Schreibe immer `tabelle.spalte` (z. B. `tblDaten.Datum`). Spaltennamen wie `ID_Art`, `ID_Kategorie` oder `Beschreibung` existieren in mehreren Tabellen — ohne Präfix ist die Abfrage mehrdeutig und schlägt fehl.
4. **SQL-Dialekt:** MultiBaseCS läuft je nach Installation auf Microsoft SQL Server, Oracle oder PostgreSQL. Das konkrete Datenbanksystem steht im Prompt des Nutzers — erstelle den Ausdruck genau in diesem Dialekt und verwende sonst möglichst dialektneutrales Standard-SQL. Datumsliterale: SQL Server `'YYYYMMDD'` (z. B. `'20230401'`), PostgreSQL und Oracle `DATE '2023-04-01'`. Für Jahres- oder Monatsfilter die vorhandenen Spalten `tblDaten.Jahr` und `tblDaten.Monat` bevorzugen statt Datumsfunktionen.
5. **Arten vs. Artengruppen:** Konkrete Artnamen (z. B. Zauneidechse, Grasfrosch) über `tblArten.Art_Deutsch` oder `tblArten.Art_Wissenschaftlich` filtern, bevorzugt mit `LIKE` (z. B. `tblArten.Art_Deutsch LIKE '%Zauneidechse%'`) — exakte Gleichheit nur, wenn der Nutzer ausdrücklich eine exakte Übereinstimmung verlangt; niemals `ID_Art`-Werte raten. Tiergruppen-Begriffe (z. B. Käfer, Schmetterlinge, Amphibien, Vögel) sind dagegen Artengruppen → `tblArtengruppen.Gruppe` mit dem exakten Listenwert aus dem Referenzwerte-Dokument inklusive Klammerzusatz (z. B. `'Käfer (Coleoptera)'`).
6. **Textvergleiche bevorzugt mit LIKE:** In Freitextspalten (z. B. `Ortsbezeichnung`, `Bemerkung`, `Quelle`, `Erfassungsname`, Artnamen, Beobachternamen) bevorzugt `LIKE '%...%'` statt `=` verwenden — exakte Gleichheit scheitert in der Praxis oft an Zusätzen, Abkürzungen oder Schreibvarianten. Ausnahme: Auswahllisten-Spalten (Regel 7) und Spalten mit dokumentierten „Vorkommende Werte" — dort den exakten Wortlaut mit `=` bzw. `IN` verwenden.
7. **Auswahllisten** (Nachweistyp, Habitat, Verhalten, Reproduktion, Artengruppe, Einheit, Kategorie, Qualität): Die exakten Werte stehen im Referenzwerte-Dokument (Link am Ende dieses Dokuments). Werte niemals raten — bei Unsicherheit das Dokument laden und den exakten Wortlaut verwenden, z. B. `tblNachweistyp.Nachweistyp = 'Sicht: Sichtbeobachtung'`. Gleiches gilt für Spalten, bei denen unten „Vorkommende Werte" dokumentiert sind: ausschließlich diese exakten Werte verwenden, niemals Codes oder Schreibweisen erfinden.
8. **ID-Spalten sind nie NULL:** Alle `ID_*`-Spalten haben immer einen Wert; `0` bedeutet „keine Angabe". Filter auf fehlende Angaben daher als `tblDaten.ID_Habitat = 0` formulieren (bzw. `<> 0` für „mit Angabe"), nicht mit `IS NULL`.
9. **LEFT JOINs:** Alle Tabellen sind per LEFT JOIN angebunden. Die gejointen Textspalten (z. B. `tblNachweistyp.Nachweistyp`) können NULL sein (insbesondere bei ID = 0) — bei Negativ-Filtern über Textspalten `OR ... IS NULL` mitbedenken.
10. **Personen:** Beobachter und Bestimmer sind installationsspezifisch. Über `tblBeobachter.Beobachter LIKE '%name%'` bzw. `tblBestimmer.Beobachter LIKE '%name%'` filtern (tblBestimmer ist ein Alias auf tblBeobachter).
11. **Strings:** Einfache Anführungszeichen verwenden; Apostrophe im Text durch Verdoppelung escapen (`'O''Brien'`).
12. **Subqueries:** Nur nötig für Tabellen außerhalb der Basis-Abfrage (siehe Restschema-Link am Ende dieses Dokuments). Für alle hier dokumentierten Tabellen reichen direkte Bedingungen.

## Basis-Abfrage

Der erstellte Ausdruck wird an der markierten Stelle hinter `WHERE` eingesetzt (Ergebnis-Spaltenliste gekürzt — für den Filter zählt nur der FROM/JOIN-Teil):

```sql
SELECT TOP 100 /* ...Ergebnisspalten... */
FROM tblDaten
  LEFT OUTER JOIN tblArten          ON tblDaten.ID_Art              = tblArten.ID_Art
  LEFT OUTER JOIN tblArtengruppen   ON tblArten.ID_Gruppe           = tblArtengruppen.ID_Gruppe
  LEFT OUTER JOIN tblArtenRLStand   ON tblArten.ID_Art              = tblArtenRLStand.ID_Art
  LEFT OUTER JOIN tblDatenZusatz    ON tblDaten.GUID_Daten          = tblDatenZusatz.GUID_Daten
  LEFT OUTER JOIN tblBeobachter     ON tblDaten.GUID_Beobachter     = tblBeobachter.GUID_Beobachter
  LEFT OUTER JOIN tblBeobachter tblBestimmer
                                    ON tblDaten.GUID_Bestimmer      = tblBestimmer.GUID_Beobachter
  LEFT OUTER JOIN tblGeometrie     ON tblDaten.GUID_Ort            = tblGeometrie.GUID_Ort
  LEFT OUTER JOIN tblHerkunft      ON tblDaten.GUID_Herkunft       = tblHerkunft.GUID_Herkunft
  LEFT OUTER JOIN tblAtlas         ON tblDaten.GUID_Atlas          = tblAtlas.GUID_Atlas
  LEFT OUTER JOIN tblSammlung      ON tblDaten.GUID_Sammlung       = tblSammlung.GUID_Sammlung
  LEFT OUTER JOIN tblEinheiten     ON tblDaten.ID_Einheit          = tblEinheiten.ID_Einheit
  LEFT OUTER JOIN tblVerhalten     ON tblDaten.ID_Verhalten        = tblVerhalten.ID_Verhalten
  LEFT OUTER JOIN tblReproduktion  ON tblDaten.ID_Reproduktion     = tblReproduktion.ID_Reproduktion
  LEFT OUTER JOIN tblNachweistyp   ON tblDaten.ID_Nachweistyp      = tblNachweistyp.ID_Nachweistyp
  LEFT OUTER JOIN tblQualitaet     ON tblDaten.ID_Qualitaet        = tblQualitaet.ID_Qualitaet
  LEFT OUTER JOIN tblHabitat       ON tblDaten.ID_Habitat          = tblHabitat.ID_Habitat
  LEFT OUTER JOIN tblKategorie     ON tblDaten.ID_Kategorie        = tblKategorie.ID_Kategorie
  LEFT OUTER JOIN tblDatenbankherkunft
                                    ON tblDaten.GUID_Datenbankherkunft = tblDatenbankherkunft.GUID_Datenbankherkunft
  LEFT OUTER JOIN tblAufnahme      ON tblDaten.GUID_Group          = tblAufnahme.GUID_Aufnahme
  LEFT OUTER JOIN tblRingnummerAlias
                                    ON tblDaten.GUID_Daten          = tblRingnummerAlias.GUID_Daten
                                   AND tblRingnummerAlias.ID_AliasTyp = 523
  LEFT OUTER JOIN ##T1_TEMPTABLE_DATEN
                                    ON tblDaten.GUID_Daten          = ##T1_TEMPTABLE_DATEN.GUID_Daten
  LEFT OUTER JOIN ##T2_TEMPTABLE_ORTE
                                    ON tblDaten.GUID_Ort            = ##T2_TEMPTABLE_ORTE.GUID_Ort
WHERE /* <– Hier gibt der Anwender seine WHERE-Klausel ein –> */
```

## Tabellen und Spalten

Nur filterrelevante Spalten — interne Verwaltungsspalten sind ausgeblendet.

### tblDaten
Zentrale Beobachtungstabelle — jede Zeile ist ein Artnachweis (Beobachtung). Fast alle Filter setzen hier an.

- `ID_Daten` (int) — Laufende Nummer des Datensatzes
- `ID_Kategorie` (int) — Oberkategorie (Auswahlliste tblKategorie, 0 = keine Angabe)
- `Ortsbezeichnung` (nvarchar) — Fundort als Freitext
- `xWGS84` (decimal) — Geografische Länge (Ost) in WGS84-Dezimalgrad
- `yWGS84` (decimal) — Geografische Breite (Nord) in WGS84-Dezimalgrad
- `MTB` (int) — Messtischblatt-Nummer (TK25, z. B. 4525)
- `MTBQ` (int) — MTB mit Quadrant (z. B. 45251)
- `Raster` (varchar) — Rasterfeld innerhalb des MTB (z. B. Minutenfeld)
- `LAEACellCode` (int) — Code der EU-LAEA-Rasterzelle
- `LAEARaster` (varchar) — EU-LAEA-Rasterbezeichnung
- `LAEA1CellCode` (int) — Code der 1-km-LAEA-Rasterzelle
- `ID_Toleranz` (int) — Lagetoleranz/-genauigkeit (Auswahlliste, 0 = keine Angabe)
- `Hoehe` (int) — Höhe über NN in Metern
- `Biotop` (varchar) — Biotopangabe als Text
- `Region` (nvarchar) — Regionsangabe als Text
- `Datum` (datetime) — Funddatum
- `Monat` (int) — Monat des Funddatums (1–12); für Zeitraumfilter bevorzugen
- `Jahr` (int) — Jahr des Funddatums; für Zeitraumfilter bevorzugen
- `ID_Art` (int) — Beobachtete Art (Join auf tblArten)
- `Quelle` (varchar) — Quellenangabe als Freitext
- `ID_Verhalten` (int) — Verhalten (Auswahlliste tblVerhalten, 0 = keine Angabe)
- `ID_Reproduktion` (int) — Reproduktionsstatus (Auswahlliste tblReproduktion, 0 = keine Angabe)
- `ID_Nachweistyp` (int) — Nachweistyp (Auswahlliste tblNachweistyp, 0 = keine Angabe)
- `ID_Qualitaet` (int) — Datenqualität (Auswahlliste tblQualitaet, 0 = keine Angabe)
- `ID_Besatz` (int)
- `ID_Revierstatus` (int)
- `ID_Quartiertyp` (int)
- `Anzahl` (varchar) — Anzahl in Originalschreibweise (Text, z. B. 'ca. 20') — NIE für numerische Vergleiche verwenden, dafür Anzahl_Min/Anzahl_Max
- `Details` (varchar)
- `Anzahl_Min` (int) — Numerische Anzahl von
- `Anzahl_Max` (int) — Numerische Anzahl bis
- `ID_Einheit` (int) — Einheit der Anzahl (Auswahlliste tblEinheiten, 0 = keine Angabe)
- `AnzahlMaennl` (int) — Anzahl Männchen
- `AnzahlWeibl` (int) — Anzahl Weibchen
- `AnzahlBluehend` (int)
- `AnzahlNichtBluehend` (int)
- `Allochthonie` (bit) — 1 = gebietsfremdes/angesiedeltes Vorkommen
- `Bemerkung` (varchar) — Freitext-Bemerkung zur Beobachtung
- `Merkmal` (varchar)
- `ReferenzNr` (varchar)
- `Flag_LastImport` (bit)
- `Flag_Beringung` (bit) — 1 = Beringungsdatensatz
- `Flag_Basisort` (bit)
- `Ringnummer` (varchar) — Ringnummer (Beringung)
- `Ringserie` (varchar) — Ringserie (Beringung)
- `RingnummerText` (varchar)
- `Anzahl_1` (int)
- `Anzahl_2` (int)
- `Anzahl_3` (int)
- `Anzahl_4` (int)
- `Anzahl_5` (int)
- `Anzahl_6` (int)
- `Anzahl_7` (int)
- `Anzahl_8` (int)
- `Anzahl_9` (int)
- `Anzahl_10` (int)
- `Anzahl_11` (int)
- `Anzahl_12` (int)
- `Masse_kg_gesamt` (float)
- `AnzahlJuvenil` (int) — Anzahl Jungtiere
- `AnzahlAdult` (int) — Anzahl Alttiere
- `AnzahlTFJuvenil` (int)
- `AnzahlTFAdult` (int)
- `AnzahlWFMaennl` (int)
- `AnzahlWFWeibl` (int)
- `AnzahlGeschJuvenil` (int)
- `AnzahlGeschAdult` (int)
- `AnzahlGeschGesamt` (int)
- `LenUnterarm` (float)
- `Len5Finger` (float)
- `LenDaumen` (float)
- `Masse` (float)
- `ID_Habitat` (int) — Habitat (Auswahlliste tblHabitat, 0 = keine Angabe)
- `ID_Material` (int)
- `ID_Herausgabegenauigkeit` (int)
- `ID_Verwendung` (int)
- `ID_GenauigkeitDatum` (int)
- `ID_GenauigkeitAnzahl` (int)
- `ID_FundTyp` (int)
- `ID_Nachweissicherheit` (int)
- `Flag_Aggregiert` (bit)
- `ID_Schicht` (int)
- `ID_Deckungsgrad` (int)
- `ID_Stadium` (int)
- `ID_Substrat` (int)
- `ID_Substratzustand` (int)
- `ID_Traegerbaum` (int)
- `ID_Wuchsstelle` (int)
- `ID_Alter` (int)
- `Date_Create` (datetime) — Zeitpunkt der Datensatz-Anlage
- `Date_Changed` (datetime) — Zeitpunkt der letzten Änderung
- `ID_Art_Negativnachweis` (int) — Art-ID bei Negativnachweis (0 = keiner)
- `ID_Art_NichtKartiert` (int) — Art-ID 'nicht kartiert' (0 = keiner)
- `Erfassungsname` (varchar) — Name der Erfassung / des Projekts
- `Datum_GeprueftAm` (datetime) — Datum der fachlichen Prüfung (NULL = ungeprüft)
- `Geprueft_Info` (varchar) — Ergebnis/Anmerkung der Prüfung

### tblArten
Artenreferenzliste (Taxonomie) mit deutschen und wissenschaftlichen Namen. Arten immer über Art_Deutsch / Art_Wissenschaftlich filtern.

- `ID_Art` (int) — Eindeutige Art-ID
- `Code_EU` (varchar) — EU-Artencode
- `Euring` (varchar) — EURING-Code (Vögel)
- `SysCode` (varchar)
- `SystemCode` (varchar)
- `BfN_Code` (varchar) — BfN-Artencode
- `Art_Deutsch` (varchar) — Deutscher Artname (z. B. 'Zauneidechse')
- `Art_Wissenschaftlich` (varchar) — Wissenschaftlicher Artname (z. B. 'Lacerta agilis')
- `Art_Subgenus` (varchar)
- `Art_Kuerzel` (varchar) — Kürzel des Artnamens
- `Autor` (nvarchar) — Erstbeschreiber
- `ID_Gruppe` (int) — Artengruppe (Join auf tblArtengruppen)
- `ID_Untergruppe` (int)
- `FFH` (varchar) — FFH-Anhänge / EU-Vogelschutzrichtlinie; Mehrfachnennungen kombiniert in einem Wert — für einzelne Anhänge daher LIKE verwenden, z. B. FFH LIKE '%FFH-IV%' — Vorkommende Werte: 'VRL-Anh.I', 'FFH-V', 'FFH-II, FFH-IV', 'FFH-IV', 'FFH-II', 'FFH-II, FFH-V', 'FFH-II *, FFH-IV', 'FFH-IV, FFH-II', 'FFH-II *', 'FFH-II *, FFH-V'
- `BNatSchG` (varchar) — Schutz nach BNatSchG: 'BG' = besonders geschützt, 'SG' = streng geschützt — Vorkommende Werte: 'BG', 'SG'
- `ID_Kategorie` (int)
- `RL20010` (varchar)
- `BL20010` (bit)
- `RL20011` (varchar)
- `BL20011` (bit)
- `RL20012` (varchar)
- `BL20012` (bit)
- `RL20013` (varchar)
- `BL20013` (bit)
- `RL20014` (varchar)
- `BL20014` (bit)
- `RL20015` (varchar)
- `BL20015` (bit)
- `RL20016` (varchar)
- `BL20016` (bit)
- `RL20017` (varchar)
- `BL20017` (bit)
- `ID_ArtenTyp` (int)

### tblArtengruppen
Artengruppen (z. B. Amphibien, Reptilien, Farn- und Samenpflanzen). Auswahlliste.

- `ID_Gruppe` (int)
- `ID_Kategorie` (int)
- `Gruppe` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Gruppe_wiss` (varchar)

### tblArtenRLStand
Rote-Liste-Stände je Art.

_(Tabelle in der Referenzdatenbank nicht vorhanden — Spalten nicht dokumentiert.)_

### tblDatenZusatz
Zusatzangaben zu einzelnen Beobachtungen.

- `Geburt` (datetime)
- `Lebensalter` (varchar)
- `ID_Geschlecht` (int)
- `ID_UnklareMeldung` (int)
- `Flag_Publiziert` (bit)
- `Flag_Benachrichtigt` (bit)
- `Flag_DataValid` (bit)
- `Flag_KorrekturDataValid` (bit)
- `Flag_DruckstatusValid` (bit)
- `Flag_CoordsLocked` (bit)
- `Aktenzeichen` (varchar)
- `Zeitdifferenz` (varchar)
- `Tagesdifferenz` (int)
- `Flugstrecke` (float)
- `Flugrichtung` (varchar)
- `wwZeitdifferenz` (varchar)
- `wwTagesdifferenz` (int)
- `wwFlugstrecke` (float)
- `wwFlugrichtung` (varchar)
- `ID_Koerperseite` (int)
- `ID_Verletzung` (int)
- `ID_AktuellerZustand` (int)
- `ID_Biotop` (int)
- `WeitereBeobachter` (varchar)
- `DatumWiedervorlage` (datetime)
- `ID_Bearbeitungsstatus` (int)
- `LenFluegel` (float)
- `LenTeilfeder` (float)
- `ID_Art_Wirtsvogel` (int)
- `ID_Fundzustand` (int)
- `ID_Fundursache` (int)
- `ID_Fundstatus` (int)
- `ID_BStatus_1` (int)
- `ID_BStatus_2` (int)
- `ID_BStatus_3` (int)
- `ID_BStatus_4` (int)
- `ID_VerifikationRing` (int)
- `ID_Vorgang` (int)
- `Brutnummer` (int)
- `AnzahlUnberingt` (int)
- `ID_Nachweissicherheit_Erst` (int)
- `Formular_ID` (varchar)
- `Fett` (int)
- `Muskel` (int)

### tblBeobachter
Beobachter/Personen. Inhalt ist installationsspezifisch — Namen per LIKE filtern.

- `ID_Beobachter` (int)
- `Beobachter` (nvarchar) — Anzeigename des Beobachters (per LIKE filtern)
- `Vorname` (nvarchar)
- `Nachname` (nvarchar)
- `PLZ` (varchar)
- `Ort` (nvarchar)
- `Strasse` (nvarchar)
- `Institution` (nvarchar)
- `Telefon` (varchar)
- `Fax` (varchar)
- `Mobil` (varchar)
- `eMail` (varchar)
- `Region` (nvarchar)
- `Bemerkung` (varchar)
- `Beringergemeinschaft` (varchar)
- `Ansprechberinger` (varchar)
- `ID_Personentyp` (int)
- `Flag` (bit)
- `NewID` (int)
- `Geburtsdatum` (datetime)
- `ID_Sprache` (int)
- `ID_BeringerStatus` (int)
- `ID_Aktivitaet` (int)
- `Arten` (varchar)
- `Software` (varchar)
- `Code_Beringer` (varchar)
- `ID_Mitteilung` (int)
- `ID_Adressierung` (int)
- `Anrede` (varchar)
- `ID_Anrede` (int)
- `AdresseAlternativ` (varchar)
- `Flag_OnlineAuskunft` (bit)
- `Flag_eMail_OnlineAuskunft` (bit)
- `ID_Owner` (int)
- `Zentrale` (varchar)
- `Alias_Zentrale` (varchar)
- `Verweis_Zentrale` (varchar)
- `Flag_Aktuell` (bit)
- `Inschrift` (varchar)
- `Flag_Kontakt` (bit)
- `Euring` (varchar)
- `Namenszusatz` (varchar)
- `Flag_HomeZentrale` (bit)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `ExternalKey` (varchar)

### tblBestimmer (Alias auf tblBeobachter)
Bestimmer der Beobachtung — Alias auf tblBeobachter (gleiche Spalten).

- `ID_Beobachter` (int)
- `Beobachter` (nvarchar) — Anzeigename des Beobachters (per LIKE filtern)
- `Vorname` (nvarchar)
- `Nachname` (nvarchar)
- `PLZ` (varchar)
- `Ort` (nvarchar)
- `Strasse` (nvarchar)
- `Institution` (nvarchar)
- `Telefon` (varchar)
- `Fax` (varchar)
- `Mobil` (varchar)
- `eMail` (varchar)
- `Region` (nvarchar)
- `Bemerkung` (varchar)
- `Beringergemeinschaft` (varchar)
- `Ansprechberinger` (varchar)
- `ID_Personentyp` (int)
- `Flag` (bit)
- `NewID` (int)
- `Geburtsdatum` (datetime)
- `ID_Sprache` (int)
- `ID_BeringerStatus` (int)
- `ID_Aktivitaet` (int)
- `Arten` (varchar)
- `Software` (varchar)
- `Code_Beringer` (varchar)
- `ID_Mitteilung` (int)
- `ID_Adressierung` (int)
- `Anrede` (varchar)
- `ID_Anrede` (int)
- `AdresseAlternativ` (varchar)
- `Flag_OnlineAuskunft` (bit)
- `Flag_eMail_OnlineAuskunft` (bit)
- `ID_Owner` (int)
- `Zentrale` (varchar)
- `Alias_Zentrale` (varchar)
- `Verweis_Zentrale` (varchar)
- `Flag_Aktuell` (bit)
- `Inschrift` (varchar)
- `Flag_Kontakt` (bit)
- `Euring` (varchar)
- `Namenszusatz` (varchar)
- `Flag_HomeZentrale` (bit)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `ExternalKey` (varchar)

### tblGeometrie
Orte/Geometrien, denen Beobachtungen zugeordnet sind.

- `ID_Ort` (int)
- `KastenNummer` (int)
- `Ortsbezeichnung` (nvarchar)
- `Nummer` (varchar)
- `xWGS84` (decimal)
- `yWGS84` (decimal)
- `MTB` (int)
- `MTBQ` (int)
- `Raster` (varchar)
- `LAEACellCode` (int)
- `LAEARaster` (varchar)
- `ID_Toleranz` (int)
- `Hoehe` (int)
- `Biotop` (varchar)
- `Region` (nvarchar)
- `Gewaesser` (varchar)
- `Flag_Group` (bit)
- `ID_Kastentyp` (int)
- `ID_Landschaftstyp` (int)
- `ID_Gewaessertyp` (int)
- `ID_Verwendung` (int)
- `Geometrietyp` (int)
- `Bemerkung` (varchar)
- `Flag_Intern` (bit)
- `Area` (float)
- `Length` (float)
- `Perimeter` (float)
- `Width` (float)
- `Height` (float)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `WKB` (image)
- `xMinBBox` (decimal)
- `xMaxBBox` (decimal)
- `yMinBBox` (decimal)
- `yMaxBBox` (decimal)
- `Flag_FFHZeitraum_3` (bit)
- `Flag_FFHZeitraum_4` (bit)
- `Flag_FFHZeitraum_5` (bit)
- `Flag_FFHZeitraum_6` (bit)
- `Flag_FFHZeitraum_7` (bit)
- `ID_Ort_FFH_BfN` (varchar)
- `ID_Ort_FFH_Land` (varchar)
- `ID_Art_FFH_BfN` (int)
- `ID_LRT_FFH_BfN` (int)
- `Synonyme` (varchar)
- `Flag_LastImport` (bit)
- `Code_EU` (varchar)
- `Euring` (varchar)
- `ID_Qualitaet` (int)
- `ID_Naturraum` (int)
- `ID_Einzugsgebiet` (int)
- `ID_Status` (int)
- `Gueltig_Ab` (datetime)
- `Gueltig_Bis` (datetime)
- `ID_Biberrevierdetail` (int)
- `ID_Owner` (int)
- `ID_Art_Habitat` (int)
- `ID_LageFFHGebiet` (int)
- `LAEA1CellCode` (int)
- `Flag_Schutzwuerdigkeit` (bit)

### tblHerkunft
Datenherkunft (installationsspezifische Auswahlliste).

- `ID_Herkunft` (int)
- `Herkunft` (varchar)
- `Kontakt` (varchar)
- `Erfassungstyp` (varchar)
- `Artengruppe` (varchar)
- `Vollstaendigkeit` (varchar)
- `Erfassungsmethodik` (varchar)
- `Erfassungszeitraum` (varchar)
- `Anzahl` (int)
- `Bemerkung` (varchar)
- `NewID` (int)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `Flag_OnlineAuskunft` (bit)
- `Kuerzel` (varchar)
- `ID_Owner` (int)
- `ExternalKey` (varchar)

### tblAtlas
Atlas-/Projektzuordnung der Beobachtung.

- `ID_Atlas` (int)
- `Atlas` (varchar)
- `Zeitraum` (varchar)
- `Herausgeber` (varchar)
- `ISBN` (varchar)
- `Erscheinungsjahr` (varchar)
- `Autor` (varchar)
- `Methodik` (varchar)
- `Bemerkung` (varchar)
- `Flag` (bit)
- `NewID` (int)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `ID_Owner` (int)
- `ExternalKey` (varchar)

### tblSammlung
Sammlungen/Belege.

- `ID_Sammlung` (int)
- `Sammlung` (varchar)
- `Bemerkung` (varchar)
- `NewID` (int)
- `Flag` (bit)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)
- `ID_Owner` (int)
- `ExternalKey` (varchar)

### tblEinheiten
Einheiten der Anzahl-Angaben (Auswahlliste, z. B. Individuen, Paare).

- `ID_Einheit` (int)
- `Einheit` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Kuerzel` (varchar)
- `Beschreibung` (varchar)
- `ID_Sort` (int)

### tblVerhalten
Verhalten bei der Beobachtung (Auswahlliste).

- `ID_Verhalten` (int)
- `Verhalten` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Kuerzel` (varchar)
- `Beschreibung` (varchar)

### tblReproduktion
Reproduktionsstatus (Auswahlliste).

- `ID_Reproduktion` (int)
- `Reproduktion` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Kuerzel` (varchar)
- `Beschreibung` (varchar)
- `ID_Wertigkeit` (int)

### tblNachweistyp
Art des Nachweises (Auswahlliste, z. B. 'Sicht: Sichtbeobachtung').

- `ID_Nachweistyp` (int)
- `Nachweistyp` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Kuerzel` (varchar)
- `Beschreibung` (varchar)

### tblQualitaet
Datenqualität/Prüfstatus (Auswahlliste).

- `ID_Qualitaet` (int)
- `Qualitaet` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Beschreibung` (varchar)

### tblHabitat
Habitat des Fundorts (Auswahlliste).

- `ID_Habitat` (int)
- `Habitat` (varchar) — exakte Werte siehe Referenzwerte-Dokument

### tblKategorie
Oberkategorie der Art (Auswahlliste).

- `ID_Kategorie` (int)
- `Kategorie` (varchar) — exakte Werte siehe Referenzwerte-Dokument
- `Beschreibung` (varchar)

### tblDatenbankherkunft
Herkunftsdatenbank des Datensatzes.

- `ID_Datenbankherkunft` (int)
- `Datenbankherkunft` (varchar)
- `Bemerkung` (varchar)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)

### tblAufnahme
Aufnahmen/Begehungen, die mehrere Beobachtungen gruppieren.

- `ID_Aufnahme` (int)
- `ID_Aufnahmetyp` (int)
- `ID_Art` (int)
- `Datum` (datetime)
- `Boden` (varchar)
- `Gesamtdeckung` (int)
- `Hangneigung` (int)
- `Lage` (int)
- `Bemerkung` (varchar)
- `Flag_B1` (bit)
- `Flag_B2` (bit)
- `Flag_B3` (bit)
- `Flag_S1` (bit)
- `Flag_S2` (bit)
- `Flag_K1` (bit)
- `Flag_K2` (bit)
- `Flag_M1` (bit)
- `Deckung_B1` (int)
- `Deckung_B2` (int)
- `Deckung_B3` (int)
- `Deckung_S1` (int)
- `Deckung_S2` (int)
- `Deckung_K1` (int)
- `Deckung_K2` (int)
- `Deckung_M1` (int)
- `Hoehe_B1` (float)
- `Hoehe_B2` (float)
- `Hoehe_B3` (float)
- `Hoehe_S1` (float)
- `Hoehe_S2` (float)
- `Hoehe_K1` (float)
- `Hoehe_K2` (float)
- `Hoehe_M1` (float)
- `WeitereBeobachter` (varchar)
- `DatumGenehmigung` (datetime)
- `Aktenzeichen` (varchar)
- `Abschnitt` (varchar)
- `xWGS84` (decimal)
- `yWGS84` (decimal)
- `Lagebeschreibung` (varchar)
- `Date_Create` (datetime)
- `Date_Changed` (datetime)
- `Date_Service_Upload` (datetime)
- `Date_Service_Download` (datetime)

### tblRingnummerAlias
Alias-Ringnummern für Beringungsdaten.

- `Zentrale` (varchar)
- `Ringserie` (varchar)
- `Ringnummer` (varchar)
- `Alias_Zentrale` (varchar)
- `Alias_Ringserie` (varchar)
- `Alias_Ringnummer` (varchar)
- `ID_ArtSonderkennzeichen` (int)
- `ID_InhaltSonderkennzeichen` (int)
- `Sonderkennzeichen` (varchar)
- `ID_AliasTyp` (int)
- `ID_VerifikationRing` (int)
- `RNText` (varchar)
- `ARNText` (varchar)

### ##T1_TEMPTABLE_DATEN
Temporäre, von der Anwendung gefüllte Tabelle: markiert Beobachtungen aus dem vorherigen Filterlauf.

- `Flag_Filter` (bit) — 1 = im vorherigen Filterlauf markiert

### ##T2_TEMPTABLE_ORTE
Temporäre, von der Anwendung gefüllte Tabelle: markiert Orte aus dem vorherigen Filterlauf.

- `Flag_Filter` (bit) — 1 = im vorherigen Filterlauf markiert

## Beziehungen (Joins)

- `tblDaten.ID_Art = tblArten.ID_Art`
- `tblArten.ID_Gruppe = tblArtengruppen.ID_Gruppe`
- `tblArten.ID_Art = tblArtenRLStand.ID_Art`
- `tblDaten.GUID_Daten = tblDatenZusatz.GUID_Daten`
- `tblDaten.GUID_Beobachter = tblBeobachter.GUID_Beobachter`
- `tblDaten.GUID_Bestimmer = tblBestimmer.GUID_Beobachter`
- `tblDaten.GUID_Ort = tblGeometrie.GUID_Ort`
- `tblDaten.GUID_Herkunft = tblHerkunft.GUID_Herkunft`
- `tblDaten.GUID_Atlas = tblAtlas.GUID_Atlas`
- `tblDaten.GUID_Sammlung = tblSammlung.GUID_Sammlung`
- `tblDaten.ID_Einheit = tblEinheiten.ID_Einheit`
- `tblDaten.ID_Verhalten = tblVerhalten.ID_Verhalten`
- `tblDaten.ID_Reproduktion = tblReproduktion.ID_Reproduktion`
- `tblDaten.ID_Nachweistyp = tblNachweistyp.ID_Nachweistyp`
- `tblDaten.ID_Qualitaet = tblQualitaet.ID_Qualitaet`
- `tblDaten.ID_Habitat = tblHabitat.ID_Habitat`
- `tblDaten.ID_Kategorie = tblKategorie.ID_Kategorie`
- `tblDaten.GUID_Datenbankherkunft = tblDatenbankherkunft.GUID_Datenbankherkunft`
- `tblDaten.GUID_Group = tblAufnahme.GUID_Aufnahme`
- `tblDaten.GUID_Daten = tblRingnummerAlias.GUID_Daten AND tblRingnummerAlias.ID_AliasTyp = 523`
- `tblDaten.GUID_Daten = ##T1_TEMPTABLE_DATEN.GUID_Daten`
- `tblDaten.GUID_Ort = ##T2_TEMPTABLE_ORTE.GUID_Ort`

## Beispiele

**Beschreibung:** Alle Sichtbeobachtungen der Zauneidechse ab 2020

```sql
tblArten.Art_Deutsch LIKE '%Zauneidechse%' AND tblNachweistyp.Nachweistyp = 'Sicht: Sichtbeobachtung' AND tblDaten.Jahr >= 2020
```

**Beschreibung:** Alle Amphibien im Mai und Juni

```sql
tblArtengruppen.Gruppe = 'Amphibien' AND tblDaten.Monat IN (5, 6)
```

**Beschreibung:** Alle Reptilien, neueste zuerst (explizite Sortierung gewünscht)

```sql
tblArtengruppen.Gruppe = 'Reptilien' ORDER BY tblDaten.Datum DESC
```

**Beschreibung:** Alle Beobachtungen im Messtischblatt 4525

```sql
tblDaten.MTB = 4525
```

**Beschreibung:** Alle Beobachtungen zwischen dem 01.04.2023 und dem 30.06.2023 (Datumsliteral hier in SQL-Server-Syntax — bei PostgreSQL/Oracle stattdessen `DATE '2023-04-01'`, siehe Regel 4)

```sql
tblDaten.Datum >= '20230401' AND tblDaten.Datum < '20230701'
```

**Beschreibung:** Alle Daten ohne Habitatangabe

```sql
tblDaten.ID_Habitat = 0
```

**Beschreibung:** Alle Beobachtungen von Beobachtern namens Müller

```sql
tblBeobachter.Beobachter LIKE '%Müller%'
```

## Weitere Dokumente (nur bei Bedarf laden)

- **Referenzwerte der Auswahllisten:** https://static.multibasecs.de/multibasecs-agent/referenzwerte.md — nur laden, wenn der Filter Werte aus Auswahllisten benötigt (Nachweistyp, Habitat, Verhalten, Reproduktion, Artengruppe, Einheit, Kategorie, Qualität).
- **Restschema:** https://static.multibasecs.de/multibasecs-agent/restschema.md — Schema aller weiteren Tabellen außerhalb der Basis-Abfrage (nur per Subquery nutzbar). Nur laden, wenn die Anfrage mit den oben dokumentierten Tabellen nicht lösbar ist.

---
_Stand: 2026-06-10 · Quelle: Datenbank MultiBaseCS_Home_
