Name: DB
Type: Server
Description: stores persistent data

Interface:
	# Per-Message Statistics
	AddMessageStats(server ID, client ID, size)
		returns: message ID
	ChangeMessageStats(message ID, status, processing time, ...)
	
	# Management General
	AddServerID(server ID)
	GetServerIDs()
		returns: list of server ID's
	ValidServerID(server ID)
		returns: true/false
	
	AddClientID(client ID)
	GetClientIDs()
		returns: list of client ID's
	ValidClientID(client ID)
		returns: true/false
	
	# Management of Statistics
	GetMessageIDs()
		returns: list of message ID's
	GetMessageStats(message ID)
		returns: message stats
	
	AddClientStats(client ID, time period, message count, ...)
	GetClientStatsIDs()
		returns: list of client statistics ID's
	GetClientStats(client stat ID)
		returns: client statistics
	GetClientStatsMatching(client ID, time period)
		returns: client statistics for client ID and time period
	
	AddServerStats(server ID, time period, message count, ...)
	GetServerStatsIDs()
		returns: list of server statistics ID's
	GetServerStats(server stat ID)
		returns: server statistics
	GetServerStatsMatching(server ID, time period)
		returns: server statistics for server ID and time period
	
State:
	# Management (updated/changed through management interface periodically)
	Client Table
		ClientID [key]
		Name
	
	ClientStat Table
		ClientStatID [key]
		ClientID
		TimePeriod
		MessageCountProcessed
		MessageCountDropped
		MessageCountPending
		MessageSizeTotal
		MessageSizeAvg
		MessageProcessingTimeTotal
		MessageProcessingTimeAvg
		MessageRatingTotal (?)
		MessageRatingAvg (?)
	
	Server Table
		ServerID [key]
		Name
	
	ServerStat Table
		ServerStatID [key]
		ServerID
		TimePeriod
		MessageCountProcessed
		MessageCountDropped
		MessageCountPending
		MessageSizeTotal
		MessageSizeAvg
		MessageProcessingTimeTotal
		MessageProcessingTimeAvg
		MessageRatingTotal (?)
		MessageRatingAvg (?)
	
	# Statistics
	MessageStat Table
		MessageID [key]
		ServerID
		ClientID
		Timestamp
		MessageStatus{Processed, Dropped, Pending}
		MessageSize
		MessageProcessingTime
		MessageRating (?)

Uses:
	None

Used By:
	MailProcessor
	ManagementClient

Exceptions:
	System Errors
	InvalidClientID
	InvalidServerID
	InvalidMessageID
	InvalidStatID