System Design: Database Partitioning Strategies