【问题标题】:Multicolumn unique constraint for columns in different tables不同表中列的多列唯一约束
【发布时间】:2016-08-10 14:36:37
【问题描述】:

我需要一些关于我正在忙于的数据库设计的输入。

总结一下我要建模的内容(请参阅database diagram)。

选项 1:

  • File 中的条目可能应用了一个或多个成本要素。
  • 成本要素具有描述、度量(货币或百分比)、分配(按质量、按体积等...)和值(数字)。
  • 必须对FileIDCostDescriptionID 的组合强制执行多列唯一性。
  • 专业版:可以创建唯一索引来强制满足上述要求的数据完整性。
  • 缺点:成本要素组合无法重复使用 - 数据重复。

选项 2:

  • 为了减少重复条目,CostElement2 被分成了三个表:CostDefaultCostInputCostElement
  • 专业版:CostInput 允许重复使用CostDescriptionIDCostMeasureIDCostAllocationID 的组合。
  • 专业版CostInput 允许重复使用 CostElementIDElementValue 组合。
  • 缺点:无法对FileIDCostDescriptionID 的组合强制执行多列唯一约束。

是否有更好的设计决策可以让我两全其美?

任何帮助将不胜感激。

非常感谢!

【问题讨论】:

  • 为什么要为每个表添加 Gw_ 前缀?也许架构会更好?我个人讨厌这样的前缀。他们添加毫无意义的打字,什么也不添加。它们还使读取表名变得更加困难。为什么 Gw 在您的大多数列名中间?我会做类似 CostDefaultID 而不是 IdGwCostDefault 的事情。而且你应该不惜一切代价避免列名的保留字(时间戳,值,名称,描述等......)至于手头的问题......好吧,我真的不明白你在问什么。
  • 嗨,肖恩,感谢您抽出宝贵时间回答我的问题。当我在发布之前阅读问题时,我确实认为自己“呕吐”。我已采纳您建议的命名更改。使用 Gw_ 前缀的原因是因为我将这些表添加到现有的 ERP 数据库中,而 ERP 推荐的添加自定义表的准则是使用特定字符串作为前缀。这也有助于对数据库中的表进行分组。我试图改写这个问题,并希望现在清楚我在问什么。如果您愿意发表评论。谢谢。
  • 我会忽略该文档。这不是一个很好的建议。而不是创建一个新模式的奇怪前缀会更好。它仍然会在对象资源管理器中对类似项目进行分组,但您不必与荒谬的名称搏斗。我真的不完全理解你的问题,但选项 2 听起来更接近你想要的。选项 1 看起来像是一个非规范化的设计,会带来很多痛苦。

标签: database-design unique-constraint


【解决方案1】:

我建议坚持使用选项 1,即单表。在这种情况下,我不会将列组合视为需要进一步规范化的重用。

您可能希望创建一个简单的复合主键,按此顺序在 FileIDCostElementID 上创建。

我对命名的唯一评论是我对名称为“File”的表格感到不舒服。除此之外,你看起来还不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2010-10-11
    • 2010-12-22
    • 2013-08-23
    • 1970-01-01
    • 2016-08-22
    • 2013-05-25
    相关资源
    最近更新 更多