如何在db中存储不同类型的地址数据?

时间:2016-01-28 15:45:39

标签: database database-design


我必须创建一个数据库,结合4种类型的xls文件,例如ABCD。每年都会创建一个新文件,从2004年开始。A有7张800-1000行,B - D有一张最多200行。

每个人都知道人们很懒,所以在excel文件中,地址数据在每张表中的存储方式都不同。其中一个,从2008年开始,将地址数据分开存储,但每个其他工作表都将这些数据合并为一列。

Sooo,这是一个问题 - 我应该如何设计数据表?像这样的东西?

+---------+----------+----------+-------------+--------------------------------+
| Street  | House Nr |   City   | Postal Code |        Combined Address        |
+---------+----------+----------+-------------+--------------------------------+
| Street1 | 20       | Somwhere | 00-000      | null                           |
| Street2 | 98       | Elswhere | 99-999      | null                           |
| null    | null     | null     | null        | Somwhere 00-000, street3 29    |
| null    | null     | null     | null        | st. Street2 65 12-345 Elswhere |
+---------+----------+----------+-------------+--------------------------------+

会有很多空值,所以也许最好的解决方案是两个不同的表?

最重要的是用户将使用此数据进行搜索,并在将来将数据添加到该数据库中而不使用excel文件。

1 个答案:

答案 0 :(得分:2)

这里至少有两种不同的视角:标准化和效率,导致不同的结果。

正常化

如果这是最重要的标准,你甚至可以制作三张桌子。显然Combined Address需要它自己的位置,但Postal CodeCity也必须存储到另一个表中,因为它们之间存在依赖关系。只有其中一个,很可能会留下Postal Code。 (是的,甚至还有StreetPostal Code,但我显然不会迂腐。)

效率

归一化作为目的本身并不一定能产生最好的结果。如果你允许自己有点草率并且保持它在你发布的模型中的方式,那么编码就会变得更容易。您可以使用触发器确保Combined Address永远不为空或使用假定它的(物化)视图,并暂时只在Combined Address中搜索。
想象一下,如果您使用不同的表,并且需要在其他表中引用这些地址(在何时使用哪个表?如何提供唯一的ID?显然是一个问题。)。

所以,决定什么更重要。

如果我没有弄错的话,我们大约需要2000行或者大约8000行,如果它是'7张,其中每张'有800-1000行'。即使后者适用,这也不是使数据校正不可行的数字。如果组合列中不同输入模式的数量很少,您可以(部分)自动执行此操作,只需要一个证明读数。

所以你可能想要考虑未来的重新设计,并选择在这种情况下更方便的东西。