【问题标题】:Alter table vs new table with foreign keys使用外键更改表与新表
【发布时间】:2010-12-20 10:07:30
【问题描述】:

我有一个现有的数据库,需要进行一些更改。我需要决定是更改表以记录额外数据还是使用已经记录该数据的现有表进行单独测试并将其链接到具有新表的另一个表。

现有:

tSubTest(ixSubTest (pk), ixTest (fk))
tPressureVolume( ixPressureVolume (pk), ixSubTest (fk), ...data fields 1...)
tMotorData( ixMotorData (pk), ixSubTest (fk), ...data fields2...)

选项 1:

tSubTest(ixSubTest (pk), ixTest (fk))
tPressureVolume( ixPressureVolume (pk), ixSubTest (fk), ...data fields 1...)
tMotorData( ixMotorData (pk), ixSubTest (fk), ...data fields2..., ...data fields 1...)

选项 2:

tSubTest(ixSubTest (pk), ixTest (fk))
tPressureVolume( ixPressureVolume (pk), ixSubTest (fk), ...data fields 1...)
tMotorData( ixMotorData (pk), ixSubTest (fk), ...data fields2...)
tMDPVLink( ixMDPVLink (pk), ixMotorData (fk), ixPressureVolume (fk))

基本上它的工作方式是在测试序列开始时进行一次检查压力体积的测试。现在他们想每五分钟记录一次它和其他电气数据。他们仍将执行初始压力容量测试。

【问题讨论】:

  • 我不懂你的` ...data fields2..., ...data fields 1...`术语
  • 我只是在缩写所有实际的数据字段。 ...data fields 1... 有六个字段,...data fields2... 有十几个。基本上我的意思是将数据字段从 tPressureVolume 附加到 tMotorData
  • 这是一个泵+ el。发动机? tMotorData 包含 el。来自电机的数据,而 tPressureVolume 描述泵?要估计实体,应该能够“可视化”对象——请解释一下。

标签: sql normalization


【解决方案1】:

如果同时采样所有数据(电机 + 泵),则将所有数据放在一个表中,如下所示:

如果压力/体积的采样独立于电机数据,请使用:

【讨论】:

    【解决方案2】:

    我有一个现有的数据库需要 做了一些改变。我需要决定 是否改变表来记录 额外数据或使用现有表 已经记录了该数据的 单独的测试并将其链接到另一个 带有新表的表。

    我不会仅仅基于在项目后期添加的事实将某些内容放入单独的表格中。

    尝试将那些属于一起的信息保留在一起 --> 我宁愿用一两列额外的列更新现有表,而不是创建一个人工的新“链接”表。

    此规则的唯一例外可能是,如果您有大量列(例如:10 个或更多)构成一个逻辑实体,并且仅在不到 10% 的情况下出现在您的业务案例中案例。

    例如如果您有特定类型的客户需要大量额外字段,但实际上只有少数客户(如您的“黄金”客户),那么最好将这些“集群”数据放入单独的表中并将其链接起来 - 因为否则对于绝大多数数据库实体来说,一大堆字段都将为空(NULL)。

    希望能有所帮助 - 只是我自己的 2 美分 ;-)

    【讨论】:

    • 我支持 Marc - 如果纯粹是向现有列添加列的问题,那么添加列,因为从长远来看,其他任何事情都会给您带来痛苦。唯一的问题是为现有数据填充新列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2021-12-28
    相关资源
    最近更新 更多