【问题标题】:Shall I put contact information in a separate table?我应该将联系信息放在单独的表格中吗?
【发布时间】:2010-07-15 08:07:16
【问题描述】:

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

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

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

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

    将其链接到其他表格
    1. 在用户和组织表中添加 address_id 列
    2. 将related_id 和related_table 列放入addresses 表中

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

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

【问题讨论】:

  • 为您的数据库考虑一个好的规范化方案。 1NF、2NF、3NF、BCNF....
  • 我不熟悉这些。我也不认为这是一个标准化问题。
  • 我想你会发现规范化问题就是这样。我强烈建议采纳康坎的建议。
  • 你能推荐一些(简短的)阅读材料吗?我可能会更深入地了解它,但我想在潜水前先试一试。

标签: mysql database-design street-address


【解决方案1】:

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

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

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

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

【讨论】:

  • 我明白了,那么 3.1 或 3.2 呢?
  • 我会说 3.1。或创建 Organization_Addresses (Org_ID, Addr_ID, Order) 以允许一个组织有多个地址;和另一个 User_Addresses。
  • 您是否有多个组织的相同地址,或者每个地址仅用于 1 个组织?从上面的问题可以看出,每个组织都有多个地址。如果地址只能属于 1 个组织,那么您应该使用地址表中的外键链接到组织表。如果每个地址可以属于多个组织,那么您将需要创建一个单独的表来链接地址和组织,如 Pascal 的评论中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2012-05-23
  • 2010-10-23
相关资源
最近更新 更多