У меня есть следующие таблицы; который будет содержать информацию о различных типах статей. Мне нужна помощь, чтобы придумать правильную схему для этого.
CREATE TABLE IF NOT EXISTS `math_articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(250) NOT NULL,
`body` text,
PRIMARY KEY (`id`),
UNIQUE KEY `title` (`title`)
)
CREATE TABLE IF NOT EXISTS `news_articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(250) NOT NULL,
`body` text,
PRIMARY KEY (`id`),
UNIQUE KEY `title` (`title`)
)
CREATE TABLE IF NOT EXISTS `other_articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(250) NOT NULL,
`body` text,
PRIMARY KEY (`id`),
UNIQUE KEY `title` (`title`)
)
CREATE TABLE IF NOT EXISTS `references` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`article_from_table_name` text NOT NULL,
`from_id` int(11) NOT NULL,
`article_to_table_name` text NOT NULL,
`to_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `TEST`.`math_articles` (
`id` ,
`title` ,
`body`
)
VALUES (
NULL , 'fibonacci sequences', 'fib sequences are: 0,1,1,2,3,5...also see article Leonardo of Pisa'
);
Так как эта math_articles.title= "последовательности фибоначчи" упоминает эту статью "Леонардо Пизы", моя программа будет вставлять в таблицу other_articles следующие данные:
INSERT INTO `TEST`.`other_articles` (
`id` ,
`title` ,
`body`
)
VALUES (
NULL , 'Leonardo of Pisa', 'Leonardo of Pisa also known as Leonardo of Pisa, Leonardo Pisano, Leonardo Bonacci, Leonardo Fibonacci, or, most commonly, simply Fibonacci, was.....'
);
Поскольку таблица other_articles.title= 'Leonardo of Pisa' была указана в таблице math_articles.title= 'последовательности фибоначчи, я должен был сохранить эту ссылку в таблице ссылок следующим образом:
INSERT INTO `TEST`.`references`
(`id`, `article_from_table_name`, `from_id`, `article_to_table_name`, `to_id`)
VALUES
(NULL, 'math_articles', '1', 'other_articles', '1');
Мои проблемы с схемой таблиц ссылок!
что, если я удалю статью math_articles.title= 'последовательности фибоначчи, тогда таблица ссылок также будет обновлена, я знаю, что я должен использовать какой-то триггер "ON DELETE CASCADE".
Ваш дизайн базы данных вызывает большинство ваших проблем. В трех таблицах, математике, новостях и т.д. Все должны быть одной и той же таблицей с столбцом типа, чтобы различать разные типы. Затем будет прямо настроена таблица ссылок, которая содержит два внешних ключа в таблице статей, одну для исходной статьи и одну для справочной статьи.
Я обычно управляю ссылочной целостностью в самом приложении, а не в слое базы данных, чтобы вся ваша бизнес-логика находилась в одном месте. Поэтому, если вы удаляете статью, то любые ссылочные записи должны быть удалены самим приложением.
Надеюсь, что это поможет!