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,则没有该选项)