A general and systematic code design methodology is proposed to efficiently combine constrained codes with PC codes for data storage channels. The proposed constrained PC code includes two component codes: the normal constrained (NC) code and the parity-related constrained (PRC) code. The NC code can be any distance-enhancing constrained code, such as the maximum transition run (MTR) code or repeated minimum transition runlength (RMTR) code. The PRC code can be any linear binary PC code. The constrained PC codes can be designed either in non-return-to-zero-inverse (NRZI) format or non-return-to-zero (NRZ) format. The rates of the designed codes are only a few tenths of a percent below the theoretical maximum. The proposed code design method enables soft information to be available to the PC decoder and facilitates soft decoding of PC codes. Furthermore, since errors are corrected equally well over the entire constrained PC codeword, error propagation due to parity bits is avoided. Efficient finite-state encoding methods are proposed to design capacity-approaching constrained codes and constrained PC codes with RMTR or MTR constraint. The generality and efficiency of the proposed code design methodology are shown by various code design examples for both magnetic and optical recording channels.