Wenn Du (als DB-Designer) bestimmen willst, dass ein Feld nicht den Wert NULL (NULL ist ungleich einem leerem Char oder einem Integer 0 und bedeutet im Prinzip "nichts") annehmen darf, dann definierst Du es als NOT NULL. Dies ist zum Beispiel bei Primärschlüsseln sinnvoll. Ein weiteres Beispiel wäre, dass zu einem Produkt zwingend ein Preis angegeben werden muss.
Wenn Du ein Feld als UNIQUE deklarierst, dürfen in der Tabelle in dieser Spalte keine Werte zwei mal vorkommen. Auch dies ist ein Kriterium, welches ein Primärschlüssel erfüllen muss. Außerdem wäre es zum Beispiel sinnvoll in einer Empfängerliste für einen Newsletter die E-Mail-Adresse als UNIQUE zu deklarieren, damit man niemandem doppelt Post schickt.
Mit beiden Schlüsselworten sollte man vorsichtig umgehen, da man sich unter Umständen Einschränkungen auferlegt, die man im späteren Gebrauch nicht erfüllen kann. Wenn man jedoch bereit ist (wie es bei großen Firmendatenbanken meist sinnvoll ist) die "Auflagen" des DB-Design zu erfüllen, erhält man konsistentere Datenbanken mit vollständigen Informationen. Andererseits werden sich die Nutzer auch Auswege überlegen, um die Einschränkungen zu umgehen, wenn eben nicht alle Informationen zur Verfügung stehen.
Weitere Information findest Du zum Beispiel im MySQL-Manual bei der
CREATE-TABLE-Syntax.
Gruß hpvw