我正在寻找一个对我们的数据库设计师提出挑战的设计问题的方向。我搜索了档案和谷歌并没有得出任何结论,但我怀疑这是一个简单/新手类型的问题。
我们有一个存储活动地点的表格。它被称为Location表。该表要求LocationCode是唯一的。该表还要求LocationName是唯一的。然而,在现实世界中,有时候两个地点将具有相同的名称,尽管它们存在于不同的地方(例如,在同一州的不同县中存在两个同名的学校)。一位设计师坚持要通过在名称上添加一个值来强制命名,例如联盟高中 - 弗朗西斯县。她的理由是确保“受控词汇”。另一位设计师坚持认为应该允许名称相同,因为这反映了现实,应该使用LocationCodes来强制/跟踪唯一性。
我倾向于第二位设计师的方向 - 应该允许名字不同。我能想到的一个类似的例子是,人们经常使用相同的名称(例如Jane Doe)。在存储有关人员的联系信息的表格中,似乎不会强迫名称不同,社会保障代码可以完成跟踪唯一性的工作。
这个问题是否有一般指导方针或标准?指向有用文档的链接非常棒。提前谢谢。
答案 0 :(得分:5)
我倾向于第二个设计师的方向 - 名字 应该被允许是不同的。
我想你的意思是说你认为名字应该是相同的,你的表应该允许重复的名字。
在存储有关人员的联系信息的表格中,似乎如此 不会强迫这些名字与社会保障不同 代码可以完成跟踪唯一性的工作。
虽然在一个简单的例子中这是真的,但在实际应用中你会发现
明确识别人员既是一个难题,也是一个依赖于应用程序的问题。当地的机动车局有识别人的方法;美国国税局拥有其方式;雇主有自己的方式;学校和医院都有自己的方式(隐私法在这里有很大的影响)。您可能需要找到自己的方式。
这是你无法避免的:在某些时候,你公司的某个人必须能够分辨出哪些数据库行说“John Smith”与你桌前愤怒的顾客匹配。 / p>
我像这样查看位置名称。 “旧金山”的全名是“旧金山,加利福尼亚州,美国”。全名可以很容易地区分“克林顿,小姐”。来自“爱荷华州克林顿”。
我发现两个不同的地方具有相同的非正式名称的情况。例如,可能有一个名为“天然桥,田纳西州”的城镇,以及田纳西州的另一个地方是天然桥,也被称为“天然桥,田纳西州”。不同的是,其中一个地方总是一个城市,而另一个总是不是。 (根据我的经验,至少。发现例外我不会感到惊讶。)
然而,你对这些现实问题是否重要依赖于应用程序。我不必处理非城市的地名,因此存储“全名”是确保良好数据的简单直接方式。
在您的情况下,对于事件位置,我看不到允许重复名称在商业意义上是实用的。如果名称是重复的,您基本上要求人们记住哪个位置代码引用每个真实世界的位置,并将其名称作为提示。对于任何显着大小的数据库,人们无法可靠地执行此操作而无需记下差异。
答案 1 :(得分:2)
这不是关于正确设计的问题。这是一个关于信息需求的问题。分析阶段应该发现哪个是正确的,而不是设计阶段。在分析和设计之间进行区分是很重要的,即使同一个团队正在做两件事
如果允许名称重复,那么当用户需要消除歧义时,他们将需要一些其他的信息。提供不同的ID对于用户来说可能是不够的,因为iD对他们来说可能是没有意义的。
回到订购该项目的人员。他们想要什么?如果他们想要用户想要的任何东西,请采访用户或可以为他们说话的人。如果没有人可以为用户说话,并且如果项目的所有者拒绝为自己说话,那么你就可以做出最好的猜测了。
答案 2 :(得分:1)
我不同意Catcall(+1),但我认为还有第三种方法可以让你吃蛋糕并吃掉它。
不喜欢这种独特命名方案的一个可能原因是,对某些人来说,某些位置包含限定符而其他位置不包含限定符可能会令人烦恼。
在许多情况下,使用模糊不清的名称可能已经足够好了,而对于其他人来说,您需要确定您确切的名称。为什么不将基本位置名称和限定符存储在单独的列中。如果限定符类似于包含该位置的县,则无论如何您都可以将其存储在每个位置。这将使您可以选择使用简单(但非唯一)的名称,当它足够好并在必要时使用完全限定名称。
答案 3 :(得分:0)
尝试此操作的一种方法是,该位置具有记录该地点的经度/纬度的额外列。始终和每次位置的名称,其次是经度和纬度是唯一的。
基本上,表格结构类似于
Location(location_name, location_longitude, location_latitude)
试图捍卫我所做的选择最好是相对于我作为程序员可用的内容以及我必须解决问题的限制。因此,在它有效地解决问题之前,这并不重要。
注意:可以通过向任何地理位置提供商编写网络服务来获得纬度/经度。
答案 4 :(得分:0)
美国境内几乎所有东西都有标准代码。
州州FIPS代码为美国人口普查所发现的几乎所有可居住建筑提供邮件代码。
例如Mellissa:http://www.melissadata.com/reference-data/zipdata.htm
查看可以添加到表中的ZIP CODE列表,该表几乎可以找到邮票可以找到的所有内容。
即使比第三世界国家更好,国际地区或地点也是一项挑战 - 特别是如果它拥有大量的农业人口。直到最近,例如在哥斯达黎加,不仅没有门牌号码,还有很少的街道被正式命名和记录。你解决了这封信,邮递员使用了一些创造力来找到收件人。地址如" Jesus Ochoa,距离OLD Coke Cola Factory 200米,最大的橡树街,第三个带绿色百叶窗的黄色房子"在20年前很常见。如果他们画房子,地址就会改变!! OLD可乐工厂已经走了多年。
如果一个国家/地区拥有类似于FIPS的标准位置服务,那么他们很可能会从一个国家/地区开始编号也会使用相同的数字。不要期望独特的编号系统。
要使其唯一,请在列表前加上标准国家/地区代码。小心ISO 3166-1(通用标准)具有重叠代码结构。