将标题存储在数据库中以便在没有前导“The”,“A”的情况下进行排序的最佳方法是什么?

时间:2008-11-10 18:43:22

标签: sql-server database-design sql-server-2000

我运行(目前正在全面检修)一个处理影院的网站(njtheater.com,如果你有兴趣的话)。

当我查询数据库中的一系列剧本时,我希望“威尼斯商人”在“M”下排序。当然,当我显示剧本名称时,我需要前面的“The”。

设计数据库以处理此问题的最佳方法是什么?

(我正在使用MS-SQL 2000)

5 个答案:

答案 0 :(得分:17)

你在两条列的正确轨道上,但我建议将整个可显示的标题存储在一列中,而不是连接列。另一列纯粹用于排序。这使您在排序和显示方面具有完全的灵活性,而不是坚持使用简单的前缀。

搜索时这是一种相当常见的方法(与排序有关)。一列(带索引)是大小写折叠,去标记等。在您的情况下,您还应用删除主要文章的语法约定到此字段中的值。然后将该列用作搜索或排序的比较键。另一列未编入索引,并保留原始密钥以供显示。

答案 1 :(得分:1)

将标题存储在两个字段中:TITLE-PREFIX和TITLE-TEXT(或其他一些字段)。然后排序第二个,但显示两者的串联,其间有空格。

答案 2 :(得分:1)

我自己解决问题的方法是在数据库中创建三列。

article   varchar(4)
sorttitle varchar(255)
title     computed (article + sortitle)

“article”将只是“The”,“A”“An”(每个上面的尾随空格)或空字符串(不为null)

“sorttitle”将删除主要文章的标题。

这样,我可以对SORTTITLE进行排序并显示TITLE。计算字段上的实际处理很少(所以它很快),插入时只需要做一些工作。

答案 3 :(得分:0)

我同意doofledorfer,但我建议存储作为前缀的一部分输入的空格,而不是假设它是单个空格。它为用户提供了更大的灵活性。您也可以在查询本身中进行一些连接,因此您不必将字段合并为业务逻辑的一部分。

答案 4 :(得分:0)

我不知道这是否可以在SQL Server中完成。如果您可以创建基于函数的索引,则可以创建一个在字段上执行正则表达式或使用您自己的函数的索引。这将比其他字段占用更少的空间,数据库本身将保持最新,并允许将完整的标题存储在一起。