In this instance, the type of relationship you are talking about is a "is a" relationship. A dog is an animal. "Is a" relationships in object oriented design are implemented using a base class, not an Interface.
So you have a base class of Animal. You then have a class of Dog that inherits from Animal.
When you retrieve your data from your database, you would create each animal as it's type, but add to a List of Animal.
Your calling function can then iterate through the List of Animal objects and call Speak without having to know what each object is.
public void MakeAnimalsSpeak()
{
// gets your animals from the database
List<Animal> animals = GetAnimals();
foreach(Animal animal in animals)
{
animal.Speak();
}
}
private List<Animals> GetAnimals()
{
List<Animal> animalsToReturn = new List<Animal>();
// get data from db
// loop through data
// switch on "type" field, create correct object.
// add too List.
return animalsToReturn;
}