【发布时间】:2015-09-15 20:59:03
【问题描述】:
背景:
(我使用的是 Microsoft SQL Server 2014)
我的公司收到包含许多帐户 (tblAccount) 的数据文件 (tblFile)。对于每个数据文件,我们可能会执行多个“定价”(tblPricing),这些“定价”可能包含文件中的所有帐户,也可能只包含其中的一部分,但“定价”不能包含任何不包含在定价所依据的文件中。所以,总结一下:
- 我们得到一个文件
- 此文件可以包含多个帐户
- 我们从这个单一文件中创建了许多定价
- 每个定价都可以包含它所链接到的文件中的全部或部分帐户,但不能包含不在该文件中的帐户
问题:
到目前为止的工作情况:
-
tblFile和tblPricing之间的1:Many关系 -
tblFile和tblAccount之间的 Many:Many 关系(一个帐户可以存在于多个文件中) -
tblPricing和tblAccount之间的 Many:Many 关系(因为可以执行多个定价,所以一个帐户可以存在多个定价)
我们的问题来自于试图在文件拥有的帐户子集和定价拥有的帐户子集之间强制执行完整性。使用上述结构,tblPricingAccounts 可以包含 tblFileAccounts 中未包含的帐户,这违反了我们对每个定价仅包含其所基于的文件中的帐户的要求。
我已经尝试更改外键关系,我打破了tblPricingAccounts 和tblAccount 之间的链接,从tblPricingAccounts 中删除了“acct_id”,而是将tblPricingAccounts 链接到tblFileAccounts(是的,我知道我需要tblFileAccounts 中的主键,我有一个)。但是,然后我可以将任何我想要的“pricing_id”插入tblPricingAccounts。现在我可以将帐户链接到与最初包含这些帐户的文件无关的定价。
需要
归根结底,我并不关心我的数据库的结构或关系是什么样的。我只需要满足以下条件,我似乎无法完全理解它:
- 一个文件包含许多帐户。
- 一个文件包含许多定价。
- 定价包含多个帐户,但这些帐户必须包含在定价所链接到的文件中。
感谢任何帮助,我愿意接受所有可以在 SQL Server 中执行的建议。最终,我正在围绕这个数据库构建一个 Web 应用程序,并且我正在使用 Entity Framework 6 来让生活更轻松(主要是......)。我显然可以通过我的代码强制执行上述 3 个需求,但我真的希望数据库成为强制执行这种完整性的最后一道防线。
【问题讨论】:
-
您是否考虑过使用
tblPricingAccounts上的触发器来查找acct_id到tblFileAccounts并匹配tblPricing中的file_id? -
嗯,不。当然,我正在设计我的 Web 应用程序,它将使用 asp.net 实体框架使用这个数据库,它不会识别触发器,但值得研究至少在数据库级别保持完整性。当我阅读更多关于触发器的内容时会更新......
标签: sql-server database entity-framework tsql