Sie sollten Ihr DAO entsprechend Ihren Anwendungsanforderungen entwerfen, nicht dem Layout Ihrer Datenbank. Beginnen Sie mit einem DAO, und wenn es zu groß wird, refaktorieren Sie es in mehrere DAOs auf eine Weise, die für Ihren Code sinnvoll ist.
Der ganze Punkt eines DAO ist verstecken alle Datenbankkonzepte (wie Tabellen) aus Ihrer Anwendung. Ihre Anwendung sollte es nur als einen Dienst mit einigen nützlichen Methoden anzeigen.
Wenn Ihre Anwendung beispielsweise einige Benutzerdaten benötigt, die sowohl aus der Tabelle "Users" als auch aus der Tabelle "EmailAddresses" stammen, sollte Ihr Anwendungscode nicht zwei DAOs koordinieren - sie sollte eine DAO-Methode getUserDetails() aufrufen verberge die Tatsache, dass mehrere Tabellen aufgerufen werden müssen.
Ich empfehle die erste der Optionen in Ihrer Frage, aber ich würde nicht auf die Regel "ein DAO pro Container-Klasse" beschränken.