我正在计划一个数据库,它有几个表,其中包含大量地址信息、城市、邮政编码、电子邮件地址、电话号码、传真号码等(大约 11 列),一个表是一个组织包含(最多)2 个地址(法定联系人和实际应该使用的联系人)的表,加上每个用户都有与他相关的相同信息。
我们也将不得不在这些地址上运行一些地理定位的东西(比如距离另一个地址 X 公里内的每个地址)。
我有很多选择,每个都有自己的问题:
- 我可以将所有信息放在每个表中,但这会使表具有大量列,我会遇到索引问题,如果我更改地址格式,则需要一段时间来修复它。
- 我可以将所有信息放在一个数组中并对其进行序列化,然后将序列化的信息存储在一个字段中,与前一种方法相同的问题是列少一点,通过 mysql 查询的可用性要低得多
我可以创建一个包含地址信息的单独表,并将其链接到其他表
- 在用户和组织表中放置一个 address_id 列
- 在地址表中放置一个related_id 和related_table 列
这应该使东西更整洁,但它可能会因过度加入或其他原因而产生一些无法预料的问题。
个人认为3.2方案是最好的,但是我对它不是太有信心,所以在征求意见。