0

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

我们也将不得不在这些地址上运行一些地理定位的东西(比如距离另一个地址 X 公里内的每个地址)。

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

  1. 我可以将所有信息放在每个表中,但这会使表具有大量列,我会遇到索引问题,如果我更改地址格式,则需要一段时间来修复它。
  2. 我可以将所有信息放在一个数组中并对其进行序列化,然后将序列化的信息存储在一个字段中,与前一种方法相同的问题是列少一点,通过 mysql 查询的可用性要低得多
  3. 我可以创建一个包含地址信息的单独表,并将其链接到其他表

    1. 在用户和组织表中放置一个 address_id 列
    2. 在地址表中放置一个related_id 和related_table 列

    这应该使东西更整洁,但它可能会因过度加入或其他原因而产生一些无法预料的问题。

个人认为3.2方案是最好的,但是我对它不是太有信心,所以在征求意见。

4

1 回答 1

0

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

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

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

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

于 2010-07-15T09:48:01.493 回答