我有以下表格;这将保存有关各类文章的信息。 我需要一些帮助,为此提出适当的架构。
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.....'
);
由于表math_articles.title ='fibonacci sequences'中引用了表other_articles.title ='Leonardo of Pisa',我将在引用表中保存此引用,如下所示:
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 ='fibonacci sequences'然后引用表也要更新,我知道我应该使用某种“ON DELETE CASCADE”触发器。
答案 0 :(得分:1)
您的数据库设计导致了大部分问题。你的三篇文章表,数学,新闻和其他都应该是一个带有类型列的表,以区分不同的类型。然后,可以直接设置一个引用表,其中包含两个外键到articles表,一个用于源文章,另一个用于参考文章。
我通常在应用程序本身而不是数据库层中管理引用完整性,以便所有业务逻辑都在一个地方。因此,如果删除文章,那么应用程序本身应删除任何引用条目。
希望有所帮助!