postgresql 如何向用户公开大小写敏感性?

tpgth1q7  于 5个月前  发布在  PostgreSQL
关注(0)|答案(5)|浏览(87)

好吧,我明白了。PostgreSQL中的数据是区分大小写的。我知道我可以使用LOWER()使我的查询不区分大小写。我知道在未来版本的PostgreSQL中甚至可能会有一个“citext“类型。我的问题是,今天,在设计用户界面时如何处理这个问题?我特别想到的是唯一性约束。
假设我的应用程序的数据看起来或多或少像一个文件系统(想想Google Chrome,除了Google Chrome实际上允许重名:-P)。如果情况不同,我如何让我们的用户容易理解他们可以有重名的事实?我认为对大多数人来说,这看起来很奇怪。
让我们先来解决一些问题:
1.我来自Windows背景,所以不区分大小写是我的“思考”方式。我现在主要使用MacOSX,它(你知道吗?)是also case-insensitive。我们的大多数用户都属于这两个类别。
1.我是PostgreSQL的新手。我的大部分经验都是使用MySQL,但我也使用过Oracle,它像PostgreSQL一样区分大小写。我当时也想了很多关于这个问题的问题,但最终一切都保持原样,让我们的用户自己解决。
1.我对技术解决方案(即让这个问题消失)和UI设计解决方案(即帮助用户对系统感到舒适)都感兴趣。
摘要:

  • 在设计用户界面时,你如何处理大小写不敏感的问题?
  • 如果情况不同,我如何使我们的用户容易理解他们可以有重复名称的事实?
    编辑:我很感激到目前为止所有的反馈。然而,如果答案是“如果大小写不同,不允许重复的名字”,那么我如何在PostgreSQL中实现它?我考虑过的一个解决方案是默默地维护一个单独的列,它总是数据的LOWER()版本,并将唯一约束放在这个列上。
fykwrbwg

fykwrbwg1#

您现在可以使用citext数据类型。尽管它可能比未来的内置版本有更多的限制。

编辑unique constraint

CREATE UNIQUE INDEX
    example_unique_idx
ON
    example_table ((LOWER(case_insensitive_field)));

字符串

wqsoz72f

wqsoz72f2#

也许你还没有意识到,你可以在函数上创建唯一的索引,甚至是部分索引。
举例来说:

create unique index some_name on users (lower(username));

字符串
将使用户名唯一,无论大小写。
您还可以进一步(例如,这在您的环境中可能不是一个好主意)使其仅对活动用户强制唯一性:

create unique index some_name on users (lower(username)) where is_active = true;


另外,请注意,对于不区分大小写的搜索,你不应该使用ILIKE。问题是ILIKE不能(出于某种原因,我真的不明白)使用索引。
因此,虽然可以使用函数索引来加速查询:

select * from users where lower(username) = '...'


select * from users where lower(username) like '...'


(at至少对于“..
索引将不会被使用(据我所知):

select * from users where username ilike '...'

zbsbpyhn

zbsbpyhn3#

区分大小写迫使用户处理计算机世界中的问题。
不要暴露大小写敏感性!
你刚刚告诉我Windows和Mac都是不区分大小写的,它们是为了减少用户的困惑。
处理这种情况的方法是,保留用户选择的大小写(用户输入是神圣的),但是当进行搜索或比较时,总是不区分大小写。

ckx4rj1h

ckx4rj1h4#

另一个实现不区分大小写的技术解决方案是create your own type,它内置了折叠到x1的功能。这样,用户(和应用程序)就不会出错。

inb24sb2

inb24sb25#

在设计用户界面时,你如何处理大小写不敏感的问题?
您不允许用户创建具有相同名称的对象,除非您有一个非常特定的目标受众,他们已经“明白”了。普通的计算机用户,艾米丽执行,不会理解为什么她有两个文件“季度报告”和“季度报告”-这只会损害产品的可用性,除非应用程序或使用场景要求区分大小写。
换句话说,除非是一个要求,否则假设大小写不敏感。
如果情况不同,我如何使我们的用户容易理解他们可以有重复名称的事实?
如果必须这样做,请强制使用一种字体,以使名称明显不同。给予一个用户选项框,该选项框可以打开和关闭警告,“此文件的名称与另一个文件的名称相似,您确定要将其保存为该名称吗?”,并在启动时自动打开(选择退出,而不是选择进入一般警告)

相关问题