Oracle 征求意见:主键中的重音符号/变音符号

Oracle 征求意见:主键中的重音符号/变音符号,oracle,database-design,Oracle,Database Design,我有一个使用自然主键的应用程序。数据库使用WE8ISO8859P15字符集。所以在我的桌上城市里,我们有像“MEDELLÍN”和“MÜNCHEN”这样的主键。我有预感,我们会有很多麻烦 我看到的问题 使用另一个字符集将此数据连接到数据库。我不想在主键上进行字符集转换 将数据转储到文件并处理这些文件我们必须始终非常了解特殊字符和客户端设置 我们应该允许在PK中使用变音符号吗?请随意发表您的意见。像您一样,我觉得这真的是在寻找问题来允许它们 除了您提到的问题外,还可能是: 想象一下切换到另一个

我有一个使用自然主键的应用程序。数据库使用WE8ISO8859P15字符集。所以在我的桌上城市里,我们有像“MEDELLÍN”和“MÜNCHEN”这样的主键。我有预感,我们会有很多麻烦

我看到的问题

  • 使用另一个字符集将此数据连接到数据库。我不想在主键上进行字符集转换
  • 将数据转储到文件并处理这些文件我们必须始终非常了解特殊字符和客户端设置

我们应该允许在PK中使用变音符号吗?请随意发表您的意见。

像您一样,我觉得这真的是在寻找问题来允许它们

除了您提到的问题外,还可能是:

  • 想象一下切换到另一个数据库供应商

我不知道引入代理主键是否是您的选择,但这可能是正确的时机;-)

如果没有,您可以复制列

  • pk列不区分大小写,不具有特殊字符等等
  • 另外一列将保留用户输入的内容,以便在某些UI中很好地显示它

  • 为什么不呢?您的DB模型已经无法修复了,为什么不引入另一个问题源呢?;)

    更严重的是,数据库在支持Unicode方面做得越来越好,因此存储自然文本(尽管有些奇怪)没有问题。您的问题是“主键”。有几种方法可以对同一文本进行编码(例如,可以使用重音字符或带普通字符的变音符号)。这意味着您可以为同一文本获取两个不同的键


    使用商业密钥作为PK有很多错误的理由,但没有好的理由。不要这样做。咬紧牙关,把它修好。现在修好它。它将比不修复它花费更少(即使花费很多)。

    是的,您将遇到这些字符的问题。离开ASCII总是会引起问题。但当你不仅在英国和美国做生意时,你别无选择

    我没有看到主键与特殊字符集相关的问题。如果您导出、导入、接口或迁移,您必须考虑这些字符,无论它们是否是PK的一部分


    但是他们强调了自然键作为主键的问题。似乎极有可能有人会写,例如Muenchen,只是为了稍后将其更改为Munchen,这当然会导致众所周知的PK更新问题。

    试图忽略发音符号只是推迟了不可避免的事情。是的,你可以挽救东欧的一些问题。但你仍然不能处理希腊城市名称。你需要Unicode,这样就没有必要再拼错Munchen/Muenchen了;我是门钦

    也就是说,一个城市只有一个名字的概念已经在布鲁塞尔(Brussel又名Bruxelles)被打破了,那就是西欧。因此,无论您如何拼写主键,它们基本上都不适用于主键。

    属性是否是键的一部分与问题无关

    无论该属性是否为键,您都会遇到与该属性之间的任何数据通信的字符集转换问题

    是的,为了“正确”编码,并尽可能保证数据不会因为字符集转换问题而损坏,您需要Unicode字符集及其编码之一

    顺便说一句,我确实对桌子本身有一些严重的怀疑。你对德国海德堡和南非海德堡做什么?英国牛津和美国牛津,那里几乎没有一个州没有一个

    什么样的信息取决于那把钥匙?如果根本没有,那么您的表更像是一个“变量类型”,而不是一个“真正的表”。在这种情况下,您最好忘记该表,将cityname属性设置为纯字符串

    如果在从数据库导出数据时确实需要为citynames生成一些“规范拼写”,那么我建议尝试设置一个“语音搜索表”,其中“常用拼写”链接到需要生成的“规范拼写”。但是,希望在填充此类表方面做出认真的努力


    在这种情况下,除了已经提到的门钦/慕尼黑和西方/希腊字母表问题外,不要忘了利格/路易克/吕蒂奇(门钦/慕尼黑)这类问题。

    事情改变了他们的名字,或者改变了他们的名字。城市、大学、公园、人们。。所有这些都不适合作为主键。也许是唯一的钥匙?还是唯一密钥的一部分?

    这是一个非内部开发的应用程序,因此我无法更改数据模型。我曾经参加过“自然钥匙”训练营。但最近的问题让我转向了“代理钥匙”阵营。例如:同一应用程序允许用户更改主键的一部分字段,从而断开与其他系统接口的记录的链接。+1永远不要将自然键用作主键,除非您以后想遇到麻烦。切换到其他DB供应商不是问题。现在所有相关的数据库都支持Unicode,而Uncode是所有ISO8859字符集的超集。使用的字符代码不是Unicode(顺便说一句,Unicode似乎是一个不错的选择,我投票支持你的答案)。我担心的是,对于另一种编码,一些数据库修补程序有一些差异。。。尽管软件供应商说他们支持一切,但一旦你看得比表面更深一点,我经常会被咬。“魔鬼在于细节”>为什么不呢?您的DB模型已经无法修复了,为什么不引入另一个问题源呢?;)我看不出有什么好笑;)>有几种方法可以对同一文本进行编码(例如,y