database-design - SQL Server 2008 : When can I NOT modify table structure? 什么时候不能删除一行?

标签 database-design sql-server-2008

几个夏天前,我在一家公司工作,该公司需要一个专为销售和记录保存而设计的 Access 数据库。那个夏天困扰我的一件事是有时无法更改列的数据类型、删除列或删除行(条目)。而且,如果我没记错的话(这是五年前的事),我想我有时会复制整个数据表,用我想要的更改重新创建表,然后再复制回来。老实说,可能是我遇到的大部分问题与当时我极度缺乏数据库设计知识有关,我可能正在尝试更改您显然不应该更改的内容。但是,这次我试图避免同样的问题。

今年夏天,我在 MS SQL Server 2008 Developer 工作,并再次着手设计一个重要的数据库系统。所以当我开始做这件事时,我的问题是,我以后不能回去改变什么?具体来说,我知道大多数限制都发生在主键/外键方面,所以我在设计时应该注意什么?

例如:

  1. 我可以更改主键的数据类型吗?如果它在另一个表中被引用怎么办?
  2. 我可以更改主键吗?如果它在另一个表中被引用?

还有哪些我应该注意的明显限制?抱歉,如果这看起来是一个明显/愚蠢的问题,但我认为许多初学者需要知道这个问题的答案 - 我就是其中之一!

谢谢!

最佳答案

如果表没有被外键引用,那就去吧,改变主键。此外,如果您处于设计阶段并且表是空的,您通常可以非常灵活地更改 FK 和 PK 关系,因为空表没有任何行来检查合规性。

还要记住,PK 和 FK 的数据类型必须完全匹配(即 bigint 到 bigint,smallint 到 smallint,而不是 bigint 到 smallint)

1- 除非您使用工具,否则更改表的主键是一项非常重要的任务。如果您使用企业管理器并更改 key ,然后单击以显示脚本,您将看到所有约束都已删除,目标表已备份,然后删除了创建的新表并重建了所有内容。如果旧主键中的数据没有转换,或者随后不是唯一的,希望一切顺利回滚。

2- 相同的实际结果

什么时候不能删除行?在修改或删除 FK 表中的所有相应行之前,您不能从 PK 表中删除。要从州表中删除得克萨斯州,您必须将所有订单记录更新为新的有效州名,或者删除它们。

关于database-design - SQL Server 2008 : When can I NOT modify table structure? 什么时候不能删除一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955923/

相关文章:

c# - 在没有超时的情况下从数据库中提取记录

mysql - 数据库设计建议 - 多个是或否问题

java - 连接到sql server 2008企业版时出现错误

asp.net - 蜘蛛抓取期间与事务相关的各种 NHibernate 错误

sql-server-2008 - 如何对子组进行编号

database - 固定大小数组数据库字段

database - PostgreSQL Schemas -- 使用场景/案例

sql - 选择具有特定顺序的特定记录而不使用通用条件

.net - "Standalone"SQL Server 补码

mysql - 市场数据库模式的建议