Проблема со ссылкой на схему базы данных MySql - PullRequest
0 голосов
/ 20 января 2011

У меня есть следующие таблицы; который будет содержать информацию о различных типах статей. Мне нужна помощь, чтобы придумать правильную схему для этого.

Таблицы:

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 = 'последовательности fibonacci' упоминает, что статья 'Леонардо Пизанский', моя программа вставит в таблицу 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 = 'Леонардо Пизанский' ссылались в таблице 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');

Как лучше всего сохранить эти ссылки?

Мои проблемы со схемой таблицы ссылок!

  • Тип данных двух столбцов article_from_table_name и article_to_table_name является текстовым, но они представляют собой реальные таблицы в моей базе данных.
  • from_id и to_id должны быть внешними ключами их предполагаемых таблиц как from_id = article_from_table_name.id и to_id = article_to_table_name.id Я не знаю, как определить это в схеме.
  • что если я удалю статью math_articles.title = 'последовательности fibonacci', то таблица ссылок также будет обновлена, я знаю, что должен использовать какой-то триггер "ON DELETE CASCADE".

    • Привет

1 Ответ

1 голос
/ 20 января 2011

Ваш дизайн базы данных вызывает большинство ваших проблем здесь. Ваши три таблицы статей, математика, новости и другие должны быть одной и той же таблицей со столбцом типа, чтобы различать разные типы. Тогда будет просто настроить таблицу ссылок, которая содержит два внешних ключа для таблицы статей, один для исходной статьи и один для ссылочной статьи.

Я обычно управляю ссылочной целостностью в самом приложении, а не на уровне базы данных, чтобы вся ваша бизнес-логика была в одном месте. Таким образом, если вы удаляете статью, любые ссылки должны быть удалены самим приложением.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...