Die Art und Weise, wie die Daten gespeichert oder geladen wird, sollte nicht durch die Klasse bestimmt werden, die diese am Ende "nur beinhaltet".
Es ist zwar durchaus möglich, so vorzugehen und wenn du das so machen willst, dann kannst du es durchaus so machen, nur werden dir die meisten Leute sagen, dass das nicht besonders sauber ist.
Abgesehen von der Art der Trennung: man kann ein einzelnes Objekt anhand seiner ID laden, aber was macht man, wenn man eine ganze Liste an Objekten (/eine Menge von Objekten) mit einem Mal laden will, ohne dass man vorher deren ID kennt? (bspw. alle Planeten eines Spielers, alle Planeten eines Spielers in Sektor Xyz, alle Spieler mit einem Planeten in Sektor Xyz, ...). Ein Konstruktoraufruf hilft da nicht weiter, also würde man wohl eine statische Methode an der jeweiligen Klasse haben, die diese auslesen kann.
Wenn der Code für die Abfrage aus der Datenbank dann nicht in den Objekten selbst liegt: wie kommt der Konstruktor an eine entsprechende Instanz? (Oder sollte es ein Singleton sein bzw. nur statische Methoden?) Wie werden die Daten dann zurückgegeben? Ein entsprechendes Objekt zu erzeugen geht ja nicht, da man dann gleich von anderer Stelle genau diese Methode aufrufen könnte, ohne den Umweg über den Konstruktor.
(Und das sind nur die Probleme, die mir auf Anhieb eingefallen sind...)