【发布时间】:2018-05-08 15:18:00
【问题描述】:
考虑一个包含 50-100 个表的数据库,all 可以直接和间接(最多 4-5 个关系深度)将 all 其 FK 依赖关系追溯到“Table1” .
原则上,如果删除了 Table1 的一条记录,并启用了级联删除,则将从所有表中删除一部分数据。
我的目标不是删除这些数据;相反,我希望能够编写脚本(复制,而不是删除)将数据子集写入文件。然后我希望能够将该数据导入另一个具有相同架构的非空数据库。当然,我需要保留所有这些关系,并且不与第二个数据库中的任何现有键发生冲突。
我意识到这是一项不平凡的任务。我找到的最接近的类似主题是here。 (编辑:此要求对于现有且成功的 SQL 数据库来说是新的。我知道它很丑陋并且可能不实用。)
我的问题是:我可以使用哪些工具和技术来简化这项任务?
我们正在使用 SQL Server,目前使用 .NET、EF6、C#。数据子集的大小约为 1-3 MB。
谢谢!
编辑:删除一些推测性陈述,并在下面添加示例表,我想在其中提取与 Table1 中的单个记录有关系的所有数据:
Table1
Table1_Id (PK)
Data1
Foo
Foo_Id (PK)
Table1_Id (FK)
FooData
Bar
Bar_Id (PK)
Table1_Id (FK)
BarData
Ding
Ding_Id (PK)
Foo_Id (FK)
Bar_Id (FK)
DingData
【问题讨论】:
-
我理解这里提出的问题,但听起来确实存在一些严重的数据架构问题。您在这里要完成的是一个很容易被破坏的主要项目。您需要做的不仅仅是简单地复制数据。如果它不存在,您还必须复制任何相关数据。写这么复杂的东西需要几周甚至几个月的时间,而且性能会很糟糕。这绝对是一个 xy 问题。 xyproblem.info
-
您能否更好地解释一下关于请求目的的商业案例?这可能有助于找到更好的解决方案。
-
假设您有 table1 和 table2。 table2 中的行不仅有 table1 的外键,还有 table3 的外键。现在你说你需要维护所有的关系信息。因此,如果该行已从 table1 中删除,则在此过程中您将希望该行加上 table2 中的行。但是要维护所有关系数据,您现在还必须从 table3 复制数据。如果该信息引用另一个表怎么办?看看这是怎么回事?
-
我认为这就是数据仓库存在的原因。我写了一些你想要的作为宠物项目的东西,但它很慢并且有局限性,而且由于我不断遇到的问题,我从未完成它。我认为@SeanLange 是正确的:这是一项艰巨的任务。
-
不是你在烦我,而是我们在用完全模糊的术语说话。共享一些表格给了我们一些可靠的工作。我们不知道您的表结构是什么或您真正想要完成什么。
标签: c# .net sql-server entity-framework