Saya melakukan pemrograman berorientasi objek dan (kebanyakan transaksional, tetapi beberapa OLAP) desain database, dan untuk keadaan saya, ada banyak tema berulang (setidaknya dengan OLTP).
Berlatih normalisasi 3nf membantu saya untuk berlatih beberapa varian dari prinsip tanggung jawab tunggal. Tabel harus mewakili konsep dalam sistem Anda - dan konsep harus berhubungan satu sama lain sehingga mereka mencoba meniru kenyataan; misalnya, jika saya sedang membangun sistem di mana Pelanggan dapat memiliki 0 atau banyak Kegiatan, maka saya membuat Tabel Pelanggan, dan Tabel Aktivitas. Tabel aktivitas memiliki hubungan kunci asing dengan tabel Pelanggan. Ketika saya sedang membangun prosedur tersimpan, saya akan memastikan untuk menggunakan gabungan luar untuk bergabung dengan Pelanggan dan aktivitas karena persyaratan bisnis bahwa Pelanggan dapat memiliki 0 aktivitas.
Saya juga mewaspadai peluang untuk ekstensibilitas dengan menggunakan tabel jembatan (tautan). Misalnya, jika saya mencoba untuk mewakili aturan bisnis di mana sebuah buku dapat memiliki jumlah penulis (variabel) yang tidak terbatas, saya akan membuat Tabel Buku, tabel Penulis, dan tabel jembatan / tautan yang memiliki referensi kunci asing untuk keduanya Buku dan Penulis.
Juga, saya menggunakan kunci pengganti pada semua tabel (biasanya kolom identitas yang bertambah secara otomatis, tapi mungkin Guids - tradeoff dengan guids dalam kode adalah bahwa mereka mengambil lebih banyak ruang memori daripada integer sederhana), dan saya menghindari mengandalkan kunci alami untuk saya pencarian (kecuali dengan Tabel Bridge / Link). Secara default, saya juga membuat indeks pada kolom kunci asing yang umum, dan meninjau prosedur yang tersimpan / permintaan sistem dari waktu ke waktu untuk mengoptimalkan strategi pengindeksan. Strategi pengindeksan lain yang saya gunakan adalah mencari tempat dalam kode saya di mana saya membangun koleksi berdasarkan kolom pencarian, dan menambahkan indeks yang sesuai ke kolom pencarian.