Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库设计:多个不同表的链接表_Sql_Database Design - Fatal编程技术网

Sql 数据库设计:多个不同表的链接表

Sql 数据库设计:多个不同表的链接表,sql,database-design,Sql,Database Design,我有一个关于数据库设计的概念性问题,这在我作为开发人员的历史上出现过多次。 想象一下,我有一个更大的数据库,它是在过去设计的,并且已经投入生产(例如,您可以使用一个库数据库) 现在有了一个新的特性请求:对于每个表中的每个现有对象,都应该有一个“帮助文本”(或者不同的东西,一个错误,一个标记…),您可以在一个地方查看 我在过去多次实现过类似的东西,但每次我都对解决方案不满意 一种解决方案是每个表都有一个链接表,如下所示: CREATE TABLE BooksHelp ( BookId I

我有一个关于数据库设计的概念性问题,这在我作为开发人员的历史上出现过多次。 想象一下,我有一个更大的数据库,它是在过去设计的,并且已经投入生产(例如,您可以使用一个库数据库)

现在有了一个新的特性请求:对于每个表中的每个现有对象,都应该有一个“帮助文本”(或者不同的东西,一个错误,一个标记…),您可以在一个地方查看

我在过去多次实现过类似的东西,但每次我都对解决方案不满意

一种解决方案是每个表都有一个链接表,如下所示:

CREATE TABLE BooksHelp (
    BookId  INT NOT NULL,
    HelpText VARCHAR NOT NULL
);


CREATE TABLE AuthorHelp (
    AuthorId  INT NOT NULL,
    HelpText VARCHAR NOT NULL
);

...
但我需要多个链接表,这使得选择每个现有的“帮助文本”都很困难


你将如何设计这个问题?还有其他更好的解决方案吗?

对于某种类型的文本项,尤其是在帮助文本等多个类型中使用它们时,最好将它们的文本数据集中在一个表中,并将引用存储在需要它们的表中。此设计还支持多语言应用程序,其中文本项必须以多种语言维护。

这似乎与尝试类似-只是不适合-没有明显的正确答案

有几个显而易见的解决办法。您识别的一个(将helptext存储在链接表中)是整洁的,但是如果您要为属于出版商的作者检索所有书籍等,则需要大量联接。正如业务逻辑所说的“所有对象都应该有helptext”(我假设每一行都有不同的helptext),将其存储在子表中并不是超逻辑的-“helptext”是每个对象的属性,而不是相关概念

您还可以向每个表中添加一个helptext列。这将属性存储在主表中,并减少认知负载(以及连接数)。如果每个作者、书籍等都有自己的helptext,这是合乎逻辑的。

我可能会添加“helptext”“将列添加到每个表中,并创建一个视图,该视图进行联合以显示所有表,或者创建一个函数来检查所有表并使用动态SQL返回该信息(但如果使用MySQL,则没有该选项)