Я создаю систему комментирования, где люди могут комментировать загруженные файлы, сообщения и задачи.Как лучше всего связать таблицу таблицы комментариев с другими различными таблицами?
Возможные решения
Решение одно - использовать внешний ключ из двух полей.
CREATE TABLE `comments`(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
foreign_key INT NOT NULL,
table_name enum('files','messages','to-do'),
user_id INT NOT NULL,
comment TEXT NOT NULL);
Решение два - Каждая таблица будет иметь первичный ключ, уникальный для базы данных.Поэтому я бы использовал uniqid (префикс $) в php в качестве первичных ключей для каждой таблицы.
CREATE TABLE `comments`(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
foreign_key char(23) NOT NULL,
table_name enum('files','messages','to-do'),
user_id INT NOT NULL,
comment TEXT NOT NULL);
Решение три - Наличие нескольких внешних ключей в таблице комментариев
CREATE TABLE `comments`(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
files_id INT NOT NULL,
messages_id INT NOT NULL,
to_do_id INT NOT NULL,
user_id INT NOT NULL,
comment TEXT NOT NULL);
Какое лучшее решение?Я ценю ваш вклад и, пожалуйста, дайте мне знать, если я могу уточнить что-либоОтвет
Предположим: 1) все данные уже экранированы.Неужели нам нужно это увидеть?
2) $ fileId = "146".
3) $ userId = "432".
4) $ comment = "Stackoverflow такой крутой!"
INSERT
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO `comments` (user_id,comment) VALUES($userId,$comment)");
$commentId = mysql_insert_id();
mysql_query("INSERT INTO `comments_files_xref` (file_id,comment_id) VALUES($fileId,$commentId)");