Проблема со ссылкой на схему базы данных MySql

0

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

Таблицы:

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');

Каков наилучший способ сохранить эти ссылки?

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

  • Тип данных двух столбцов: 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= 'последовательности фибоначчи, тогда таблица ссылок также будет обновлена, я знаю, что я должен использовать какой-то триггер "ON DELETE CASCADE".

    • Привет
Теги:
database-design
schema-design

1 ответ

1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню