In RDBO, each object represents a single, uniquely identified row in a table. Therefore, there must be some way to uniquely identify a row in a table. Any unique key will do, even if it's not specified as a primary key constraint in the database. But RDBO will need something that it calls a primary key. You can pick one of the unique keys and tell RDBO that it is the primary key, for example.
(You can actually create RDBO-derived classes that front tables without unique or primary keys, but the load() and save() object methods will not work as designed, for what I hope are obvious reasons.)