Здравствуйте!
Нужна помощь в проектировании базы и составлении SQL запросов.
Есть форма, которая позволяет посетителю оставить отзыв/комментарий. Форма состоит из полей: Ф.И.О., Email, Категория отзыва (можно выбрать несколько категорий), Текст отзыва. Есть админская часть, в которой админ может редактировать, добавлять и удалять категории отзыва. Я создал базу, под это приложение, которое состоит из 4 таблиц: user(для авторизации админа), comment(для хранения отзывов), category(для категорий) и cat_id(в которой хранится ID коммента и категории). Вот так она выглядит:
Подойдет ли для такого приложения такая база? Стоит ли убрать таблицу cat_id, а в comment добавить столбец category_id в которой будут храниться id категорий? Как лучше всего нормализовать такую базу?
Если оставить базу в таком виде, как связать столбцы comment.id с cat_id.comment_id и category.id с cat_id.category_id, чтобы, например, при удалении категории или комментария удалялись и связанные с ним записи из таблицы cat_id?
Для добавления записей в таблицу cat_id и вывода комментариев создал два метода:
public function create($comment_id, $category_id)
{
foreach ($category_id as $value) {
$sql = 'INSERT INTO `cat_id`(`comment_id`, `category_id`) VALUES ("' . $comment_id . '", "' . $value . '")';
$result = $this->mysqli->query($sql);
if (!$result) {
die($this->mysqli->error);
}
}
return true;
}
public function show_comment($id)
{
$sql = 'SELECT firstname, name, lastname, email, comment FROM `comment` WHERE comment.id = ' . $id;
$result = $this->mysqli->query($sql);
if (!$result) die($this->mysqli->error);
$a = $result->fetch_assoc();
$sql = 'SELECT category_id FROM `cat_id` WHERE cat_id.comment_id = ' . $id;
$result = $this->mysqli->query($sql);
if (!$result) die($this->mysqli->error);
$b = $result->fetch_all(MYSQLI_ASSOC);
$c = array();
$sql = '';
foreach ($b as $key => $value) {
$sql .= 'SELECT title FROM `category` WHERE id = ' . $value['category_id'] . ';';
}
$result = $this->mysqli->multi_query($sql);
if (!$result) die($this->mysqli->error);
do {
if ($result = $this->mysqli->store_result()) {
while ($row = $result->fetch_row()) {
$c[] = $row[0];
}
$result->free();
}
} while ($this->mysqli->next_result());
$d = array_merge($a, $c);
return $d;
}
Помогите пожалуйста спроектировать нормальное бд, связать между собой таблицы и составить нормальные SQL запросы.