<commit_before>Block 0:

Einschränkung der Expressversion des SQL Servers:
Die Datenbank der Expressversion kann nur 4 GB groß werden. Ebenfalls werden
nur 1 GB RAM und ein CPU-Kern unterstüzt.  Für eine Produktivumgebung ist dies
selten ausreichend. Ich würde diese Version also nur einsetzen, wenn ich mir
ziemlich sicher wäre, dass diese Einschränkungen nicht zum tragen kommen(z.B.
bei einer sehr kleinen Website).

Block 1:
Jedes Mal wenn man eine Seite in den meisten Browsern mit einem POST-Aufruf
aufruft, erscheint eine Warnung, ob diesselben Daten nochmal gesendet werden,
damit der Benutzer eine Möglichkeit hat ein doppeltes Absenden zu vermeiden.
Dies kann zum Beispiel Doppelposts in Foren und Doppelbestellungen bei
Bestellformularen verhindern.

Ablauf einer Weiterleitung:
Eine Seite mit dem entsprechenden Meta-Tag wird aufgerufen.
Der Browser startet einen Timer.
Sobald die entsprechend spezifizierte Anzahl an Sekunden abgelaufen ist wird
die Seite aufgerufen, die als Weiterleitungsziel angegeben wurde.

Abbilden von Relationstypen:
1:1 Relation:
Diese Relation kann abgebildet werden, indem bei einer der beiden Entitäten
eine Fremdschlüsselreferenz zur anderen Entität eingefügt wird. Zusätzliche
Attribute der Referenz können auch einer der beiden Entitäten zugeordnet
werden.

1:N Relation:
Diese Relation kann abgebildet werden, indem bei der Entität, die N-mal
vorkommt eine Fremdschlüsselreferenz zu der Entität, die nur einmal vorkommt
gespeichert wird. Zusätzliche Attribute der Relation können der Entität, die
N-mal vorkommt, zugeordnet werden.

N:M Relation:
Bei dieser Relation bleibt einem nichts anderes übrig, als eine weiter Tabelle
anzulegen, in der die Relation gespeichert wird. Dazu wird in der Tabelle
jeweils eine Spalte für eine Fremdschlüsselreferenz pro Entität eingefügt.
Zusätzliche Attribute der Relation können als zusätzliche Spalten der neuen
Tabelle abgebildet werden.

GO Schlüsselwort:
Das GO Schlüsselwort in MSSQL bewirkt, dass alle bis jetzt getätigten Befehle
direkt ausgeführt werden sollen bevor weitere Befehle angenommen werden.

Constraints:
Das "unique" Constraint bewirkt, dass Daten, die in dieser Spalte eingetragen
werden einzigartig sind.
"check" Constraints überprüfen, ob die angegebene Bedingung erfüllt wird. Hier
können zum Beispiel Zahlenbereiche eingeschränkt werden, oder Enumerations
nachgebildet werden.

Kaskadiertes Löschen:
Wenn man probiert einen Benutzer zu löschen, der schon zu einem Student oder
Professor spezialisiert wurde, gibt es einen Fehler. Dieser besagt, dass erst
Benutzer erst gelöscht werden können wenn keine Fremdschlüsselreferenzen zu
diesem zeigen, da ansonsten die Zeile in der Student Tabelle keine Aussage mehr
hätte.
Dies kann automatisiert werden, in dem man einen Constraint hinzufügt, der das
Löschen kaskadiert.

Index:
Ein Index beschleunigt das Finden von Daten in der Datenbank. Es dauert
allerdings länger die Daten zuändern, da der Index ebenfalls geändert werden
muss.
Ein gefilterter Index nimmt, wie der Name schon sagt, nur Daten in den Index
auf, die den Filter passieren.
Ein "clustured" Index sorgt dafür, dass die physische Reihenfolge der Daten,
der logischen entspricht.
Ich habe einen Index für das Feld Forum.OberforumID erstellt, da dieses Feld
sehr selten geändert wird, aber pro Seitenaufruf mehrmals abgefragt werden
muss.<commit_msg>Added Block 2 to dossier.txt.<commit_after>Block 0:

Einschränkung der Expressversion des SQL Servers:
Die Datenbank der Expressversion kann nur 4 GB groß werden. Ebenfalls werden
nur 1 GB RAM und ein CPU-Kern unterstüzt.  Für eine Produktivumgebung ist dies
selten ausreichend. Ich würde diese Version also nur einsetzen, wenn ich mir
ziemlich sicher wäre, dass diese Einschränkungen nicht zum tragen kommen(z.B.
bei einer sehr kleinen Website).

Block 1:
Jedes Mal wenn man eine Seite in den meisten Browsern mit einem POST-Aufruf
aufruft, erscheint eine Warnung, ob diesselben Daten nochmal gesendet werden,
damit der Benutzer eine Möglichkeit hat ein doppeltes Absenden zu vermeiden.
Dies kann zum Beispiel Doppelposts in Foren und Doppelbestellungen bei
Bestellformularen verhindern.

Ablauf einer Weiterleitung:
Eine Seite mit dem entsprechenden Meta-Tag wird aufgerufen.
Der Browser startet einen Timer.
Sobald die entsprechend spezifizierte Anzahl an Sekunden abgelaufen ist wird
die Seite aufgerufen, die als Weiterleitungsziel angegeben wurde.

Abbilden von Relationstypen:
1:1 Relation:
Diese Relation kann abgebildet werden, indem bei einer der beiden Entitäten
eine Fremdschlüsselreferenz zur anderen Entität eingefügt wird. Zusätzliche
Attribute der Referenz können auch einer der beiden Entitäten zugeordnet
werden.

1:N Relation:
Diese Relation kann abgebildet werden, indem bei der Entität, die N-mal
vorkommt eine Fremdschlüsselreferenz zu der Entität, die nur einmal vorkommt
gespeichert wird. Zusätzliche Attribute der Relation können der Entität, die
N-mal vorkommt, zugeordnet werden.

N:M Relation:
Bei dieser Relation bleibt einem nichts anderes übrig, als eine weiter Tabelle
anzulegen, in der die Relation gespeichert wird. Dazu wird in der Tabelle
jeweils eine Spalte für eine Fremdschlüsselreferenz pro Entität eingefügt.
Zusätzliche Attribute der Relation können als zusätzliche Spalten der neuen
Tabelle abgebildet werden.

GO Schlüsselwort:
Das GO Schlüsselwort in MSSQL bewirkt, dass alle bis jetzt getätigten Befehle
direkt ausgeführt werden sollen bevor weitere Befehle angenommen werden.

Constraints:
Das "unique" Constraint bewirkt, dass Daten, die in dieser Spalte eingetragen
werden einzigartig sind.
"check" Constraints überprüfen, ob die angegebene Bedingung erfüllt wird. Hier
können zum Beispiel Zahlenbereiche eingeschränkt werden, oder Enumerations
nachgebildet werden.

Kaskadiertes Löschen:
Wenn man probiert einen Benutzer zu löschen, der schon zu einem Student oder
Professor spezialisiert wurde, gibt es einen Fehler. Dieser besagt, dass erst
Benutzer erst gelöscht werden können wenn keine Fremdschlüsselreferenzen zu
diesem zeigen, da ansonsten die Zeile in der Student Tabelle keine Aussage mehr
hätte.
Dies kann automatisiert werden, in dem man einen Constraint hinzufügt, der das
Löschen kaskadiert.

Index:
Ein Index beschleunigt das Finden von Daten in der Datenbank. Es dauert
allerdings länger die Daten zuändern, da der Index ebenfalls geändert werden
muss.
Ein gefilterter Index nimmt, wie der Name schon sagt, nur Daten in den Index
auf, die den Filter passieren.
Ein "clustured" Index sorgt dafür, dass die physische Reihenfolge der Daten,
der logischen entspricht.
Ich habe einen Index für das Feld Forum.OberforumID erstellt, da dieses Feld
sehr selten geändert wird, aber pro Seitenaufruf mehrmals abgefragt werden
muss.


Block 2:

Select und Project haben die Aufgabe Zeilen und Spalten aus der Tabelle
auszuwählen, die ein gewisses Kriterium erfüllen.

Group by bewirkt, dass gleiche Einträge einer spezifizierten Spalte
zusammengefasst werden.

Where wird benutzt um nur gewisse selektierte Reihen auszuwählen. Es wird also
mit Select benutzt. Having hingegen wird in Verbindung mit Group by benutzt.

Zwei Tabellen sind Union kompatibel, wenn sie die gleiche Anzahl Spalten haben,
und die Spalten jeweils den gleichen Datentyp.

ConnectionString:
"Data Source=FAB-PC\SQLEXPRESS;Initial Catalog=praktikum;Integrated Security=True"

Der clientseitige Redirect ist eher als Hinweis für den Benutzer/Browser zu
sehen, wohin man am besten als nächstes surft.
Ein evtl. bosartiger Benutzer könnte diesen Hinweis ignorieren, und ganz
woanders hinsurfen.  Ein serverseitiger Redirect lässt keine andere Möglichkeit
zu außerdem dem Redirect zu folgen, oder die Verbindung abzubrechen.

Ein Login-Log könnte die IP-Adresse, den aktuellen Zeitstempel, und den
gewünschten Benutzer enthalten. So könnte man gewisse Limits für Loginversuche
erzwingen. Vorraussetzung dafür ist, das die jeweiligen Daten bekannt und
unverfälscht sind (IP-Adresse ist zum Beispiel problematisch: Proxies, ...).

Um ein nicht-MVC Webprojektin ein MVC Projekt zu überführen, muss die
Funktionalität aus den cshtml Dateien in Controller und Models überführt
werden. Dazu muss der Code je nach Funktionalität getrennt werden. Dabei ist
darauf zu achten, wie die Daten zwischen den verschiedenen Komponenten
übergeben wurde und wird.

Ich habe die Views derart unterteilt, so dass nach Möglichkeit jede Funktion
ihre eigene View hat.

Um einen Benutzer hinzufügen zu können musste ein weiteres Attribut(das
bestätigte Passwort) hinzugefügt werden. Außerdem mussten alle Felder
entsprechend ihren Anforderungen validiert werden.
{'fraction_non_alphanumeric': 0.028849496002780674, 'fraction_numerical': 0.001853782875680686, 'mean_word_length': 5.53444360333081, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7336195', 'n_tokens_mistral': 2862, 'n_tokens_neox': 2922, 'n_words': 1182}