次のテーブルがあります。さまざまな種類の記事に関する情報を保持します。このための適切なスキーマを考え出すのに助けが必要です。
テーブルは次のとおりです。
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 = 'ピサのレオナルド' がテーブル 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 の 2 つの列のデータ型はテキストですが、データベース内の実際のテーブルです。
- from_id と to_id は、 from_id = article_from_table_name.id と to_id = article_to_table_name.id のように、予測テーブルの外部キーにする必要があります。スキーマでこれを定義する方法がわかりません。
記事 math_articles.title = 'フィボナッチ数列' を削除すると、参照テーブルも更新されます。何らかの "ON DELETE CASCADE" トリガーを使用する必要があることはわかっています。
- よろしく