Entity framework 弱实体是否需要部分密钥?

Entity framework 弱实体是否需要部分密钥?,entity-framework,database-design,Entity Framework,Database Design,弱实体是否需要部分密钥?或者您可以只使用其父键作为主键 i、 e订单和订单项。Order有一个PK OrderPK,而OrderItem没有部分键 这被认为是错误的做法吗?OrderItem表应该有一个OrderID字段,该字段将FK引用回Orders表。这可以确保每个项目都是针对有效订单的 然后通常会有另一个字段来区分每个项目,该字段将与OrderID字段一起使用,以形成项目的主键 这可以是一个内在值,也可以是订单中每个项目的唯一值。SKU或PartNum可能就是这样一个值,假设同一项目的多个

弱实体是否需要部分密钥?或者您可以只使用其父键作为主键

i、 e订单和订单项。Order有一个PK OrderPK,而OrderItem没有部分键


这被认为是错误的做法吗?

OrderItem表应该有一个OrderID字段,该字段将FK引用回Orders表。这可以确保每个项目都是针对有效订单的

然后通常会有另一个字段来区分每个项目,该字段将与OrderID字段一起使用,以形成项目的主键

这可以是一个内在值,也可以是订单中每个项目的唯一值。SKU或PartNum可能就是这样一个值,假设同一项目的多个实例将合并到一个条目中。要找到这个值,只需问问自己,在相同的顺序中,要唯一地标识一个项目和另一个项目,您需要的最小数据量是多少。然而,这可能是不可能的。此方案的一个缺点是,可能会对关键字段使用动态数据。某一特定商品的SKU很可能在未来某个时间发生变化

或者订单中的每个项目都可能有一个顺序值(1,2,3,…)。此方案的一个缺点是无法由系统生成顺序值。对于每个订单,每个序列都是唯一的,必须由触发器或应用程序代码生成

或者,对于所有订单的所有项目,可能存在一个系统生成的唯一顺序值,该字段可能是唯一的主键。在查询中,
row\u number
函数仍然可以生成按订单顺序的值,但这意味着特定项目在不同的查询中可能具有不同的值。这可能是问题,也可能不是问题


此时,只有您对系统有足够的了解,才能选择最佳选项。但是用户通常需要能够选择一个特定订单中的一个特定项目,因此通常需要为每个项目定义某种类型的键。

想想看,如果一个
OrderItem
具有与
order
相同的主键,那么一个
OrderItem
可以有多少个
order