数据库设计 - 规范化

标签 database normalization

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

我的系统向用户发送数据。用户可以选择通过以下方式发送数据:

  • XML
  • 电子邮件
  • 发布

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

假设我们有一个存储“数据传递选择”(XML、电子邮件或邮政)的数据库表,最好将额外需要的变量存储在此表中,这意味着如果选择了 XML,则电子邮件字段将为空在那一行中,或者制作三个新表来存储与“数据传递选择”表中每个可能选择相关联的变量,然后通过“数据传递选择”PK 关联这些表中的条目会更好吗?

或者以何种方式完成并不重要?

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

谢谢!

最佳答案

一些 RDBMS ( PostgreSQL for example ),允许表继承。因此,您可以定义 DataDeliveryChoices,然后创建 3 个继承自它的附加表 DataDeliveryXMLDataDeliveryEmail、...

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

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

可能性是无限的:)

关于数据库设计 - 规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478579/

相关文章:

database - 为什么我不知道 PostGIS 是否正确安装在我的 PostgreSQL 数据库上?

php - 更新 SQL 中的单行

r - 使用 R 中的行平均值标准化数据

sql - 数据库事务——或者这是一个规范化问题?

machine-learning - 神经网络标准化输出数据

OpenGL 法线不起作用?

android - 在 Android 上定位 SQLite 数据库文件

mysql - 不分组选择

php - 扩展数据、减少加载时间、让我的虚拟主机满意的最佳方式

c - 如何在 C 中将整数数组从 0 标准化为 10