Sql server 在SQL Server中,如何正确地将自动填充的表与手动填充的表分开?

Sql server 在SQL Server中,如何正确地将自动填充的表与手动填充的表分开?,sql-server,database,database-design,sql-server-2008,Sql Server,Database,Database Design,Sql Server 2008,假设数据库中有以下两个表: [Movies] (Scheme: Automatic) ---------------------------- MovieID Name [Comments] (Scheme: Manual) ---------------------------- CommentID MovieID Text “Movies”表每10分钟由服务更新一次,“Comments”表由数据库用户手动更新 通常,您只需在两个表之间创建一个简单的外键关系,并进行级联更新和删除,但在这种

假设数据库中有以下两个表:

[Movies] (Scheme: Automatic)
----------------------------
MovieID
Name

[Comments] (Scheme: Manual)
----------------------------
CommentID
MovieID
Text
“Movies”表每10分钟由服务更新一次,“Comments”表由数据库用户手动更新

通常,您只需在两个表之间创建一个简单的外键关系,并进行级联更新和删除,但在这种情况下,我希望能够保留手动输入的数据,即使它所引用的电影被删除(更新服务不太可靠)。这应该只是从自动表到手动表的一对多关系中的一个问题。如何将数据库的手动部分和自动填充部分分开

我计划添加一个外键,它不维护引用完整性,只级联更新,而不是删除。但这样做有什么陷阱我应该意识到吗?我的意思是,除了一个事实,我可能会得到一些实际上没有引用任何东西的手动数据

编辑/澄清:


我只是想澄清一下。示例表完全由两部分组成。实际上,数据库将包含服务器、应用程序、应用程序注释、版本号等对象。服务器相关信息将自动填充,但一些应用程序详细信息将手动填充。可能是特殊配置之类的信息。即使服务器记录被删除,该服务器上的应用程序注释仍然有价值,不应删除。

我建议您使用由服务更新的导入表,然后从中填充电影表。然后,您可以在“电影”表中保留已删除的电影。可能会将它们标记为已删除或已过时,但您仍然可以保留它们以用于历史目的。

我建议您使用由服务更新的导入表,然后从中填充电影表。然后,您可以在“电影”表中保留已删除的电影。可能会将它们标记为已删除或已过时,但您仍然可以保留它们以用于历史目的。

我认为您应该在该场景中使用软删除。我认为您不想看到您不知道它们属于哪部电影的评论。

我认为您应该对该场景使用软删除。我认为你不想发表你不知道属于哪部电影的评论。

同意;例如,复制movies表并添加一个状态字段,该字段指示每个记录的当前状态(live/checking/deleted)。然后,自动导入应进入临时表,将所有电影的状态设置为“检查”,然后使用临时表更新真实电影表,将电影状态设置为在临时表中找到时处于活动状态。完成后,将任何仍处于“检查”状态的电影设置为删除,因为在自动导入中找不到它们。在应用程序端,选择任何状态为“已删除”的电影。

同意;例如,复制movies表并添加一个状态字段,该字段指示每个记录的当前状态(live/checking/deleted)。然后,自动导入应进入临时表,将所有电影的状态设置为“检查”,然后使用临时表更新真实电影表,将电影状态设置为在临时表中找到时处于活动状态。完成后,将任何仍处于“检查”状态的电影设置为删除,因为在自动导入中找不到它们。在应用程序端,选择任何状态为“已删除”的电影

“我正计划添加一个外键 这并不是在维护引用 完整性和仅级联更新, 不是删除。”

由于您似乎正在使用代理项,因此更新与外部元素无关。此外,既然您不关心孤立数据,那么为什么要使用引用约束呢?您可以使用约束来确保某些东西存在,而在这种情况下,您似乎并不需要这些东西

“我正计划添加一个外键 这并不是在维护引用 完整性和仅级联更新, 不是删除。”


由于您似乎正在使用代理项,因此更新与外部元素无关。此外,既然您不关心孤立数据,那么为什么要使用引用约束呢?您可以使用约束来确保某些内容的存在,而在这种情况下,您似乎并不需要这些内容。

我已经对问题进行了澄清,这些表格实际上不是“电影”和“评论”。我应该在原始问题中提到,对不起。我已经对问题进行了澄清,表格实际上不是“电影”和“评论”。我应该在原始问题中提到这一点,对不起。关于更新,你可能是对的。仍然包含fk的原因是我正在使用它们自动生成业务实体。但我认为当数据丢失时,它的行为并不正确。我可能只会像其他答案所建议的那样添加一个“已删除”列。关于更新,你可能是对的。仍然包含fk的原因是我正在使用它们自动生成业务实体。但我认为当数据丢失时,它的行为并不正确。我可能只会像其他答案所建议的那样添加一个“已删除”列。我认为你是对的,最好将其标记为已删除,而不是实际删除。这也将使我的业务实体中的逻辑更简单,更容易自动生成。谢谢。我想你是对的。可能最好将删除标记为删除,而不是实际删除它们。这也将使我的业务实体中的逻辑更简单,更容易自动生成。谢谢,谢谢你的建议。谢谢你的建议。(+1)