Mysql 我要把联系方式放在单独的表格里吗?

Mysql 我要把联系方式放在单独的表格里吗?,mysql,database-design,street-address,Mysql,Database Design,Street Address,我正在规划一个数据库,它有两个表,其中包含大量的地址信息、城市、邮政编码、电子邮件地址、电话、传真等等(大约11列),一个表是一个组织表,包含(最多)2个地址(法律联系人和他们实际应该使用的联系人),另外,每个用户都有与他相关的相同信息 我们还需要在这些地址上运行一些地理定位功能(比如每个地址与另一个地址的距离在X公里以内) 我有很多选择,每个都有自己的问题: 我可以将所有信息放在每个表中,但这会导致表中有大量的列,我在索引时会遇到问题,如果我更改地址格式,则需要一段时间来修复它 我可以将所有信

我正在规划一个数据库,它有两个表,其中包含大量的地址信息、城市、邮政编码、电子邮件地址、电话、传真等等(大约11列),一个表是一个组织表,包含(最多)2个地址(法律联系人和他们实际应该使用的联系人),另外,每个用户都有与他相关的相同信息

我们还需要在这些地址上运行一些地理定位功能(比如每个地址与另一个地址的距离在X公里以内)

我有很多选择,每个都有自己的问题:

  • 我可以将所有信息放在每个表中,但这会导致表中有大量的列,我在索引时会遇到问题,如果我更改地址格式,则需要一段时间来修复它
  • 我可以将所有信息放在一个数组中并对其进行序列化,然后将序列化的信息存储在一个字段中,与前面的方法一样,通过mysql查询,列少了一点,可用性低了很多
  • 我可以用地址信息创建一个单独的表,并通过

  • 将address_id列放入users and organizations表中
  • 将相关的\u id和相关的\u表列放入addresses表中
  • 这应该会让东西更整洁,但它可能会因过度加入或其他原因造成一些无法预料的问题


    就我个人而言,我认为解决方案3.2是最好的,但我对它不是很有信心,所以我想征求意见。

    选项2肯定是过时的,因为它会将过滤逻辑放入代码中,而不是让DBMS处理它们

    选项1或3将取决于您的需要

    如果您需要快速访问所有数据,并且通常访问两个地址以及组织信息,那么您可以考虑选项1。但是,如果mysql中的表太大,这将使查询变得困难(即速度慢)


    如果表索引正确,选项3很好。

    为数据库考虑一个好的规范化方案。1NF,2NF,3NF,BCNF……我不熟悉这些。我也不认为这是一个正常化的问题。我想你会发现正常化的问题就是它。我强烈建议采纳康康的建议。你能推荐一些(简短的)阅读材料吗?我可能会对它有更多的了解,但我想在潜水前把脚浸一下。这里有一个很好的简要概述:我明白了,那么3.1或3.2呢?我想说3.1。或者创建组织地址(组织ID、地址ID、订单),以便为一个组织提供多个地址;和另一个用户的地址。您是否有多个组织的相同地址,或者每个地址仅适用于一个组织?从上面的问题可以看出,每个组织都有多个地址。如果地址只能属于1个组织,则应使用地址表中的外键链接到组织表。如果每个地址可以属于多个组织,那么您需要创建一个单独的表来链接地址和组织,如Pascal的评论中所述。