我必须创建一个包含4种xls文件的数据库,例如A
、B
、C
和D
。从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文件。
最佳答案
这里至少有两种不同的视角:规范化和效率,导致不同的结果。
标准化
如果这是最重要的标准,你甚至可以做三个表。显然Combined Address
需要一个自己的位置,但是Postal Code
和City
也必须存储到另一个表中,因为它们之间存在依赖关系。只有其中一个,很可能Postal Code
会留下来。(是的,甚至还有一些关于Street
和Postal Code
的东西,但我显然不会太迂腐。)
效率
标准化本身并不是最好的结果。如果你允许自己在这一点上有点草率,并且让它保持在你发布的模型中的状态,那么在编写代码时事情可能会变得更容易。您可以使用触发器来确保Combined Address
永远不为空,或者使用一个(具体化的)视图假装为空,暂时只在Combined Address
中搜索。
想象一下,如果使用不同的表,并且需要在其他表中引用这些地址(在什么时候使用哪个表?如何提供唯一的ID?显然是个问题)。
所以,决定什么更重要。
如果我没弄错的话,我们大概要取2000行,如果是‘7张,每张800-1000行’的话,大概要取8000行。即使后者适用,这也不是一个使数据校正不可行的数字。如果组合列中不同输入模式的数目较低,则可以(部分)自动执行此操作,只需进行一次证明读取即可。
所以你可能也想考虑一下未来的重新设计,在这种情况下选择更方便的。
关于database - 如何在数据库中存储不同类型的地址数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35065893/