3

我正在寻找对我们的数据库设计师提出挑战的设计难题的方向。我搜索了档案和谷歌并没有得出任何结论,尽管我怀疑这是一个简单/新手类型的问题。

我们有一个存储事件位置的表。它被称为位置表。该表要求 LocationCode 是唯一的。该表还要求 LocationName 是唯一的。然而,在现实世界中,有时虽然两个地点存在于不同的地方,但它们将具有相同的名称(例如,两个具有相同名称的学校存在于同一州的不同县)。一位设计师坚持认为应该通过在名称上附加一个值来强制名称不同,例如县名(例如联合高中 - 弗朗西斯县)。她这样做的理由是确保“受控词汇”。另一位设计师坚持应该允许名称相同,因为这反映了现实,并且应该使用 LocationCodes 来强制/跟踪唯一性。

我倾向于第二位设计师的方向——名字应该允许不同。我能想到的一个可比较的例子是人们经常使用相同的名字(例如 Jane Doe)。在存储有关人员的联系信息的表中,似乎不会强制要求姓名不同,而社会保障代码将完成跟踪唯一性的工作。

那么对于这个问题是否有一般的指导方针或标准?指向有用文档的链接会很棒。提前致谢。

4

5 回答 5

5

我倾向于第二位设计师的方向——名字应该允许不同。

我认为您的意思是说您认为应该允许名称相同,您的表应该允许重复名称。

在存储有关人员的联系信息的表中,似乎不会强制要求姓名不同,而社会保障代码将完成跟踪唯一性的工作。

虽然在简单的情况下确实如此,但在实际应用程序中,您会发现

  • 一些居住在美国的外国人没有 SSAN,
  • SSAN 有重复的,合法的和非法的,并且
  • 一些美国公民没有 SSAN。(通常是因为出生在医院以外的地方。)

明确地识别人员既是一个难题,也是一个依赖于应用程序的问题。当地机动车管理局有其识别人员的方法;国税局自有办法;雇主有自己的方式;学校和医院有自己的方式(隐私法在这里有很大的影响)。您可能需要找到自己的方式。

这是您无法避免的:在某些时候,您公司的某个人必须能够分辨出许多数据库行中写着“John Smith”的哪一行与您办公桌前愤怒的客户相匹配。

我看这样的位置名称。“旧金山”的全称是“美国加利福尼亚州旧金山”。全名很容易区分“克林顿小姐”。来自“爱荷华州克林顿”。

我发现两个不同的地方具有相同的非正式名称的情况。例如,可能有一个名为“田纳西州天然桥”的城镇,而田纳西州的另一个地方天然桥,也称为“田纳西州天然桥”。不同之处在于,其中一个地方总是一座城市,而另一个地方则不是。(至少根据我的经验。发现异常我不会感到惊讶。)

但是,这些现实世界中的任何问题对来说是否重要,都取决于应用程序。我不必处理不是城市的地名,因此存储“全名”是一种简单直接的方式来确保良好的数据。

在您的情况下,对于活动地点,我看不出允许重复名称在商业意义上是实用的。如果名称重复,您基本上需要人们记住哪个位置代码指的是每个真实世界的位置,并给出其名称作为提示。对于任何显着规模的数据库,如果不写下差异,人们就无法可靠地做到这一点。

于 2012-08-09T16:43:18.793 回答
2

这不是关于正确设计的问题。这是一个关于信息要求的问题。应该在分析阶段发现哪个是正确的,而不是设计阶段。区分分析和设计很重要,即使是同一个团队同时做这两种工作

如果允许名称重复,那么用户在需要消除歧义时将需要一些其他信息。为用户提供不同的 ID 可能还不够,因为 iD 对他们来说可能毫无意义。

回到订购该项目的人那里。他们想要什么?如果他们想要用户想要的任何东西,请采访用户或可以为他们说话的人。如果没有人可以为用户说话,如果项目的所有者拒绝为自己说话,那么你就只能做出最好的猜测。

于 2012-08-10T12:44:41.990 回答
1

我不反对 Catcall (+1),但我认为还有第三种方法可以让你吃蛋糕也吃。

不喜欢独特命名方案的可能原因之一是某些位置包含限定符而其他位置不包含限定符可能对某些人来说很麻烦。

在许多情况下,使用模糊的名称可能就足够了,而对于其他情况,您需要确定您所指的确切名称。为什么不将基本位置名称和限定符存储在单独的列中。如果限定符类似于包含该位置的县,那么无论如何您都可以为每个位置存储它。这将使您可以选择在足够好的情况下使用简单(但非唯一)的名称,并在必要时使用完全限定的名称。

于 2012-08-10T12:23:28.817 回答
0

美国几乎所有东西都有标准代码。

州县 FIPS 代码为美国人口普查发现的几乎所有可居住建筑提供了一个邮件代码。

例如梅丽莎: http ://www.melissadata.com/reference-data/zipdata.htm

查看可以添加到表格中的邮政编码列表,该表格几乎可以找到邮票可以找到的所有内容。

即使在比第三世界国家更好的国家,国际地址或地点也是一个挑战——尤其是如果它有大量的农业人口。直到最近,例如在哥斯达黎加,不仅没有门牌号码,而且很少有街道被正式命名和记录。你给这封信写地址,邮递员会用一点创意来找到收件人。像“耶稣奥乔亚,距离老可乐工厂 200 米,有最大橡树的街道,带绿色百叶窗的第三座黄色房子”这样的地址在 20 年前很常见。如果他们粉刷房子,地址就会改变!!旧可乐工厂已经消失多年。

如果一个国家/地区拥有类似于 FIPS 的标准位置服务,那么他们很有可能也从一个开始编号,并且使用相同的编号。不要期望唯一的编号系统。

为了使其独一无二,在列表前加上标准国家代码。小心 ISO 3166-1(通用标准)有重叠的代码结构。

于 2015-02-09T22:20:10.653 回答
0

尝试此操作的一种方法是与具有额外列的位置一起记录该地点的经度/纬度。总是和每次位置的名称,后面跟经度和纬度都是唯一的。

本质上,表结构类似于,

Location(location_name, location_longitude, location_latitude)

试图捍卫我所做的选择是最好的,这与我作为程序员可用的东西以及我解决问题所必须的限制有关。因此,在它有效地解决问题之前,这真的无关紧要。

注意:纬度/经度可以通过向任何地理位置提供者写入网络服务来获得。

于 2012-08-10T20:09:04.947 回答