【发布时间】:2016-08-10 14:36:37
【问题描述】:
我需要一些关于我正在忙于的数据库设计的输入。
总结一下我要建模的内容(请参阅database diagram)。
选项 1:
-
File中的条目可能应用了一个或多个成本要素。 - 成本要素具有描述、度量(货币或百分比)、分配(按质量、按体积等...)和值(数字)。
- 必须对
FileID和CostDescriptionID的组合强制执行多列唯一性。 - 专业版:可以创建唯一索引来强制满足上述要求的数据完整性。
- 缺点:成本要素组合无法重复使用 - 数据重复。
选项 2:
- 为了减少重复条目,
CostElement2被分成了三个表:CostDefault、CostInput和CostElement。 -
专业版:CostInput 允许重复使用
CostDescriptionID、CostMeasureID和CostAllocationID的组合。 -
专业版:
CostInput允许重复使用CostElementID和ElementValue组合。 -
缺点:无法对
FileID和CostDescriptionID的组合强制执行多列唯一约束。
是否有更好的设计决策可以让我两全其美?
任何帮助将不胜感激。
非常感谢!
【问题讨论】:
-
为什么要为每个表添加 Gw_ 前缀?也许架构会更好?我个人讨厌这样的前缀。他们添加毫无意义的打字,什么也不添加。它们还使读取表名变得更加困难。为什么 Gw 在您的大多数列名中间?我会做类似 CostDefaultID 而不是 IdGwCostDefault 的事情。而且你应该不惜一切代价避免列名的保留字(时间戳,值,名称,描述等......)至于手头的问题......好吧,我真的不明白你在问什么。
-
嗨,肖恩,感谢您抽出宝贵时间回答我的问题。当我在发布之前阅读问题时,我确实认为自己“呕吐”。我已采纳您建议的命名更改。使用 Gw_ 前缀的原因是因为我将这些表添加到现有的 ERP 数据库中,而 ERP 推荐的添加自定义表的准则是使用特定字符串作为前缀。这也有助于对数据库中的表进行分组。我试图改写这个问题,并希望现在清楚我在问什么。如果您愿意发表评论。谢谢。
-
我会忽略该文档。这不是一个很好的建议。而不是创建一个新模式的奇怪前缀会更好。它仍然会在对象资源管理器中对类似项目进行分组,但您不必与荒谬的名称搏斗。我真的不完全理解你的问题,但选项 2 听起来更接近你想要的。选项 1 看起来像是一个非规范化的设计,会带来很多痛苦。
标签: database-design unique-constraint