Как правильно использовать связь таблиц?
1 Я называю таблицы в единственном числе, как и модели. 
пример
blog_post
blog_category
blog_category_many или по фен-шую blog_category_pivot   в общем любая many_to_many таблица заканчиваться на pivot
И еще, если это таблица относиться к блогу вначале всегда будет идти будет blog_ , так легче потом ориентироваться по БД.
Связи как меня учили манахи, которые часто используються в моделях я выношу в trait
UserRelationshipUserId
User что я в этой связи получаю Relationship - говорит мне что за трейт UserId по какому полю я получаю User модель
Большая чать роли как говорил мне сенсей являеться поддержка phpdoc  в комментариях для IDE<?php
namespace app\models\traits;
use app\models\User;

/**
 * Class UserRelationUserId
 *
 * @package app\models\traits
 * @property \app\models\User $user
 */
trait UserRelationUserId
{
	/**
	 * Relationship get user
	 * @return \yii\db\ActiveQuery
	 */
	public function getUser()
	{
		/**@var \yii\db\ActiveRecord $this */
		return $this->hasOne(User::className(), ['id' => 'user_id']);
	}
}
4 Обычно из CRUD я использую только генерацию модели,  так как ручное создание кода модели с нуля тратит мою чакру в пустую)
1. Очень даже правильный, если один пост может быть в нескольких категориях, иначе нужны только 2 таблицы.
2. Про связи в YII есть много информация, ищите.
3. Название должно быть понятным в первую очередь вам, а потом и другим, кто будет с ним работать. В вашем случае вполне адекватное название.
4. А что у нас-то спрашивать? Если хотите быстро сделать - КРУД, иначе пишите сами(+опыт,+скорость печати..)