Ja, folgen Sie diesem Beispiel nicht.
Er verwendet Zahlen im TINYINT
, die magische Bedeutungen haben und höchstwahrscheinlich in seinem Code als Konstanten dargestellt werden, also bedeutet 1 eine Art von Aktivität, 2 bedeutet ein anderes, usw., und nur der Code kennt diese Bedeutungen - nicht die Datenbank.
Dann gibt es die "source_id", die sich auf einen nicht deklarierten, nicht erzwungenen Fremdschlüssel bezieht, der auf eine von mehreren anderen Tabellen verweist. Tu das nicht.
Innerhalb einer Datenbankspalte sollten alle Werte dieselbe Bedeutung haben - sie sollten alle aus derselben Informationsdomäne stammen. Wenn es eine "thing_id" -Spalte gibt, sollte sie sich immer auf die "id" einer Zeile in der Dingtabelle beziehen. Es sollte nicht beziehen sich auf eine Zeile in der Tabelle "thing1" manchmal oder vielleicht eine Zeile in der Tabelle "thing2" anderen Zeiten je nachdem, ob "thing_type" auf "1" oder "2" gesetzt ist ... yuck.
Es gibt wahrscheinlich brauchbare Anwendungsfälle für ein solches Design, aber ich würde dieses Modell als Warnhinweis auf eine Datenbank interpretieren, die keine referenzielle Integrität erzwingt ... und das nicht mit Best Practices für relationale Datenbanken übereinstimmt.
Hinweis von seinem letzten Kommentar ...
Nein verbindet.
Er verwendet die relationale Datenbank nicht wirklich als relationale Datenbank. Er benutzt es fast als eine Art Schlüssel/Wert-Speicher.
Ok, gut gesagt, ich verstehe was du meinst. Also irgendwelche Verbesserungsvorschläge? –