ash*_*raf 42 database user-interface database-design
我试图找到一种更好的方法来存储表中的人名.3场超过1场用于存储人名的好处是什么?
UPDATE
这是一个有趣的讨论和有关存储名称和用户体验的资源
Ric*_*dle 64
您始终可以从其组件构造全名,但不能始终将全名解构为其组件.
假设您想要写一封以"Dear Richie"开头的电子邮件 - 如果您有一个given_name字段,您可以轻松地做到这一点,但是从他们的全名中弄清楚某人的名字是不是微不足道的.
您也可以通过given_name或family_name,或其他任何方式轻松搜索或排序.
(请注意我用given_name,family_name等等,而不是first_name,last_name因为不同的文化把他们的名字在不同的订单.)
在一般情况下解决这个问题很难 - 这是一篇文章,讲述了它有多难:在都柏林核心中代表人们的名字.
rao*_*son 36
尽可能保持数据清洁!
怎么样?
在您提出要求时,只需要向您的用户询问您最不需要的东西.
如何存储名称无关紧要.重要的是那个
如果您骚扰具有必填字段的用户多次填写并重新提问,他们可能会感到不安,而不是立即购买您的应用程序.您希望始终避免糟糕的用户体验.
没有用户关心您在数据库中查找其中间名是多么容易.他希望有一种轻松,感觉良好的体验,就是这样.
如果用户被迫输入数据,如邮政地址,甚至电子邮件地址,只需要"只读"帐户而不需要通知,用户会怎么做?他们将垃圾数据放入您的系统.这将使您的超级搜索和排序算法无论如何都无用.
因此,我的建议是在任何应用程序中收集来自用户的实际需要的信息,以便为他们提供服务,不再需要.
例如,如果您经营一家宠物食品在线商店,请不要在注册时询问您的用户他们拥有哪种宠物.一旦他们登录并且所有人都满意(新客户),他们可以选择填写.在他们订购实际运送到他们家的东西之前,不要问他们他们的邮政地址,他们支付的东西,因此关心你有他们的确切坐标.
这将导致更好的数据质量,这是您应该关注的,而不是用户没有受益的技术细节....
在你的例子中,我只想要全名(不确定),一旦用户心甘情愿地订阅你的时事通讯,让用户决定他/她想要如何解决...
Joh*_*ers 13
下一次我正在开发一个必须存储名称的系统时,我将尝试一些激进的东西:根据需求进行设计.
我们打算用什么名字?
根据名称将用于什么,我们将确定要存储多少信息.也许我们允许用户输入所有这三个,包括第一种情况下的换行符(Generalissimo Franco可能希望列出他的完整头衔和约会,如果他还没有死的话).也许我们提供First,Middle,Last,Generation作为选项,并将其余部分填入默认值.也许我们提供其他常见选项,如Surname,Given Name.
这与我在1975年开始编写COBOL编程之前使用过的旧式First,Middle,Last形成对比,并且从此以后一直"适应".
Pet*_*ore 11
不幸的是,这有点像询问在数据库中存储数字的最佳方式.这取决于你将要用它做什么 - 有时你想要一个int,有时你需要一个字节,有时你想要一个浮点数.使用名称取决于您希望用户来自哪些文化,您计划使用名称做什么(您是否会使用这些名称连接另一个将名称存储为"姓氏,名字"的系统? ),以及你有多大可以惹恼你的用户.如果这是一个内部人力资源应用程序,你可能会给用户带来很多烦恼,并且有一个非常有条理的,正式的名称组件细分(有超过3个 - 不要忘记mr/mrs,jr,III,多个中间名,带有连字符的姓氏,如果你想要处理来自所有文化的名字,谁知道还有什么.如果你有一个用户可能会或可能不关心的webapp,你就不能要求他们过多关心.
您可能希望在3个单独的字段中搜索一个,并且可以便宜地连接全名.
例如,如果您想搜索所有诺兰先生,您的查询将是
SELECT Title+' '+FirstName+' '+Surname As FullName
from table where firstname = 'Mr' and surname ='Nolan'
Run Code Online (Sandbox Code Playgroud)
只用全名来做这件事会很痛苦.
小智 5
我是英国人,只有一个名字。我通常把它放在“姓氏”字段中,以免造成麻烦。我通常也被迫在“名字”字段中输入一些内容,这根据定义是错误的。
任何强加除“名称”之外的内容的尝试至少在某些时候注定是错误的,有时甚至会让用户感到非常沮丧。在印度南部、印度尼西亚和巴基斯坦(有数亿人口),单名很常见,在英国偶尔也会出现像我这样的怪人。
“第一、中间、最后”的事情非常以美国为中心。很少有其他国家会这样考虑名字。请停止这样做。