【问题标题】:Database Design - Normalization数据库设计 - 规范化
【发布时间】:2012-09-18 22:13:33
【问题描述】:

这对我来说是一个新话题,我已经阅读了几篇文章,但我仍然不清楚,甚至不确定以下问题是否与这篇文章的标题有关。

我的系统向用户发送数据。用户可以选择要发送的数据:

  • XML
  • 电子邮件
  • 发布

根据用户的选择,需要几个额外但不同的变量。例如,通过电子邮件发送数据时需要电子邮件地址,但通过 XML 发送数据时不需要。

假设我们有一个存储“数据交付选择”(XML、电子邮件或邮政)的数据库表,最好在此表中存储额外需要的变量,这意味着如果选择 XML,电子邮件字段将为空在该行中,还是创建三个新表来存储与“数据交付选择”表中每个可能的选择相关联的变量,然后通过“数据交付选择”PK 关联这些表中的条目?

或者用哪种方式完成并不重要?

出于问题的目的,忘记我可能已经在其他地方持有用户电子邮件地址等的事实。

谢谢!

【问题讨论】:

    标签: database normalization


    【解决方案1】:

    某些 RDBMS (PostgreSQL for example) 允许表继承。所以你可以定义DataDeliveryChoices,然后创建3个额外的表,从它继承DataDeliveryXMLDataDeliveryEmail,...

    MSSQL 允许您在列中存储(和查询)XML 文档,因此您可以在 XML 中存储附加数据(不是经典的数据库设计,但如果您需要添加一些数据字段,则非常灵活,无需更改架构)。

    您添加三个额外表格的方式是 IMO 也是一种可接受的解决方案。

    可能性是无限的:)

    【讨论】:

    • 我应该指定它是 MySQL 对不起。
    • 嗯,我认为在 MySQL 中,三表方法是唯一的方法
    • 是的,你让我从 OOP 的角度来思考这个问题。我认为现在最好使用 MySQL / PHP 环境的 3 个表。谢谢。