【问题标题】:sql server enforce constraint without a relationsql server强制没有关系的约束
【发布时间】:2012-12-05 18:29:06
【问题描述】:

我想实现一个基于this model 的简单翻译。我知道有几种方法可以做到这一点,但我想保持简单。

我的问题是关于约束...显然我无法创建 FK 关系,因为我只会将 PN 值保存在订单表中,并且产品 PK 是复合的(id + 语言)

为了保持某种完整性(级联删除或避免删除使用过的产品)我该怎么办?我正在考虑我的应用程序代码中的触发器和/或业务逻辑规则。

我想请教一些意见,谢谢

【问题讨论】:

    标签: sql sql-server foreign-keys relational-database


    【解决方案1】:

    模型在关系方面没有意义,你必须规范化才能接近 例如

    产品(ProductID(K),描述)

    ProductVersions(ProductVersionID (K),ProductID (FK), Language,(FK?)) 在 ProductID 和 Language 上具有唯一的复合键。

    他们到底在订购什么产品或产品/语言?

    【讨论】:

    • 产品始终相同,在本例中为“PN”。我对按顺序保存语言不感兴趣。 PN是我所需要的。客户将使用用户选择的语言对其进行翻译。正如你所说,我可以创建一个参考添加另一个表,就像你建议的那样。但这意味着为每个需要翻译的表添加一个新的翻译表,这也意味着我的所有查询都需要至少一个连接......它更复杂。我一直在寻找更简单的结构(如果值得的话),我仍在设计过程中
    • 我会选择托尼的建议。不要对抗系统。如果你想要约束,那么规范化并采用 RDBMS 为你提供的开箱即用的东西。一个额外的连接与尴尬的模型(如屏幕截图中的那个)对我来说是一个明显的选择。
    • 帮不了你。如果您不使用额外的表来描述与数据库的关系,那么您就不能拥有一个,并且您将永远做所有的工作来处理潜在的无效数据。我知道我会做出哪个选择,永远是很长的时间。
    • 这样想。你说产品总是一样的,你写了一个系统来实现这个逻辑,然后你把伊特鲁里亚语的产品寄给我,告诉我它和美索不达米亚版本一样。我会同意吗?不!在订单上获得语言,为自己省去很多心痛。如果翻译是在产品上执行订单以完成订单的过程,那么请查看某种供应方案。你似乎做出的妥协会让你在未来的任何改进中付出巨大的代价。
    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多