An empty string would have to be treated as a special case (you need to generate a name to push the schema back to the database) so an Option makes more sense. When you get an unnamed non-composite PK you can turn it into a ColumnOption for creating the DDL so the database will generate a name for you.