In order to represent inheritance, several recent design for database programming languages have made use of class consruct, which can be thought of as a restricted data type with an associated set of instances. moreover, these classes are persistent: they survive from one program invocation to onether. this paper examines whether it is necessary to tie together type, extent and persistence in order to model inheritance and suggests that they may be separated to provide more general database programming languages. in particular we shall see that it is possible to assign a generic data type to a function that extracts all the objects of a given type in the database so that the class hierarchy can be derived from the type hieraarchy. we shall also examine object-level inheritance at both object and type level.