【问题标题】:Storing names in database在数据库中存储名称
【发布时间】:2012-10-09 14:59:43
【问题描述】:

我最近想建立一个小型社交网络,我对存储名称有点迷茫和困惑。

所以重点是,这个网络将面向 4 个不同的国家/地区开放,匈牙利、俄罗斯、法国和美国。

不好的部分是,如果我想在数据库中将名称存储为first namelast name,这不是一个好主意,因为例如在匈牙利,名称会被切换,例如,如果 Amirecian Citizen 注册为 Scott Summers,Scott 是 first name 而 Summers 是 last 但例如在匈牙利语中完全不同,名字是姓氏,姓氏是第一个,所以如果Scott 是匈牙利人,他的名字应该是这样的:Summers Scott。

我在我的国家(匈牙利)的经历,当他们在 Facebook 上注册时改名时真的很沮丧,所以我想避免这种情况。

我想在表格中提供一个full name 字段,但这也不是一个好主意(在我看来)。

所以如果可能的话,我想问问更有经验的开发者的意见,谢谢

【问题讨论】:

  • 您打算单独处理部分名称吗?如果没有,full name 似乎也不是没有道理。你为什么不喜欢这种方法?
  • 不,全名不是个好主意。它根本没有标准化 - 考虑按姓氏排序 - 这种方式不可能(或至少非常昂贵)。
  • 谢谢@Damien_The_Unbeliever 会检查一下
  • @Argeman:数据库设计者是否选择将名称存储为“全名”、“名字”和“姓氏”、“首选名称”或任何其他方式与规范化无关.

标签: database database-design


【解决方案1】:

如果您工作的每个领域都有一个约定,即每个人都有一个姓氏、一个或多个名字,并且希望这些名字以特定格式格式化,并且 您需要处理名称的各个部分,然后存储这些事实:

Family NameGiven NameOther NamesPreferred Name Format。我还建议您让他们输入Preferred Name

您通常使用Preferred Name 来解决它们,并且您将使用Preferred Name Format 来控制将Family NameGiven NameOther Names 组装成他们的文化可以接受的格式。

设计 UI 以允许他们无错误地输入这些内容留给读者作为练习 :-)

【讨论】:

  • 感谢您的回复,我有一个愚蠢的问题(对不起,我喜欢问一些我没有经验的愚蠢问题),如果不是 首选名称 我会添加一个显示名称
  • @LeventeNagy - 是的,这是另一种说法。
【解决方案2】:

您可以为包含名称的表创建一个视图,并在表本身中存储一个标志。您可以从 SQL 中检索全名。例如:

SELECT 
    IF(nametable.last_name_first,
        CONCAT(nametable.last_name,' ',nametable.first_name),
        CONCAT(nametable.first_name,' ',nametable.last_name)) AS fullname 
    FROM nametable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多