When working with large volumes of data, which may need to be accessible by large numbers of different people, it is important to design the database to minimise redundancy (i.e. unnecessary duplication of information), whilst maintaining consistency (e.g. if the data values for an entity are changed, then the same changes should be consistent throughout the system). The system must also be able to guarantee security (i.e. provide limits on who can read what types of data, and who can update different types of data), protect against data loss caused by system failures (e.g. by making regular backups) and be able to manage concurrence (i.e. handle what to do if several people try to access the same data at the same time). Decisions must be made as to whether the database should be distributed (i.e. physically located in different sites) or not. When designing a large database it is also important to try to ensure there is sufficient flexibility to adjust to unforeseen contingencies (e.g. the need to add new types of data). This generally involves trying to separate the procedures for querying the data from the structures used to store the data (data independence). This is one of the key features of a database- i.e. users interact with a representation of the data which is independent of the actual physical storage and the DBMS translates the user’s instructions into operations on the actual data.