假设我创建了一个表Clients
。我定义了一个主键和一组约束,例如:
以此类推。
现在,我创建另一个表,该表的主键为Clients
。
是否应该为外键创建相同的约束?
如果我不这样做,那就没关系,因为该值首先不会存在于主表中:
示例:我没有在外键上创建约束,而是尝试添加一个长度小于5个字符且小写的值...数据库将不在父表上找到该值,因此将不会记录该值,那么在外部表上设置相同约束集的意义何在?
答案 0 :(得分:0)
至少您应将外键列保持为非空。否则,子表中可能会有许多NULL值。
同样,如@Dale Burrell所述,PRIMARY KEY应该由系统生成,以强制唯一性。如果要在主键列上创建聚簇索引,则该索引应该是狭窄的,递增的,不能为null的唯一值,以获得良好的性能。
答案 1 :(得分:0)
您不需要外键的长度或大写约束。外键约束将对它们进行“隐式检查”(如您所说,因为引用的数据不存在)。
但是对于可空性,这是一个选择。在SQL Server中,如果外键引用表中的一列或多列为NULL
,则不会强制执行约束。
因此,这里的问题应该是-另一个表中是否有行应该有效地不引用在Clients
表中的行?
其他人建议PK应该由系统生成。尽管我同意这样做通常很有用,但不要忘记也对实际数据实施约束。例如。即使此列最终不是您的PK,也可能需要对其进行唯一约束,以确保您不会在数据中出现重复项。