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 = 'ピサのレオナルド' がテーブル 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" トリガーを使用する必要があることはわかっています。

    • よろしく
4

1 に答える 1

1

データベースの設計が、ここでの問題のほとんどを引き起こしています。記事の 3 つのテーブル、数学、ニュース、その他はすべて、異なるタイプを区別するためのタイプ列を持つ同じテーブルである必要があります。次に、記事テーブルへの 2 つの外部キー (ソース記事用と参照記事用) を含む参照テーブルを設定するのは簡単です。

私は通常、データベース層ではなくアプリケーション自体で参照整合性を管理し、すべてのビジネス ロジックを 1 か所にまとめます。そのため、記事を削除すると、参照エントリはアプリケーション自体によって削除されます。

それが役立つことを願っています!

于 2011-01-20T00:11:55.510 に答える