使用以下实体关系结构,我很难弄清楚 LOAN 和 ITEM 实体之间的关系是否有效?
LOAN 的弱实体使用 'loan_dateLeant' 的部分键和来自 CUSTOMER 和 ITEM 的主键来形成 LOAN 的主键。但是,LOAN 与 ITEM 具有“一对多”关系,因为贷款可以包含多个项目。但这当然意味着如果多于一件物品被借出,那么借出记录将有两个 item_id 值作为其部分主键?
使用以下实体关系结构,我很难弄清楚 LOAN 和 ITEM 实体之间的关系是否有效?
LOAN 的弱实体使用 'loan_dateLeant' 的部分键和来自 CUSTOMER 和 ITEM 的主键来形成 LOAN 的主键。但是,LOAN 与 ITEM 具有“一对多”关系,因为贷款可以包含多个项目。但这当然意味着如果多于一件物品被借出,那么借出记录将有两个 item_id 值作为其部分主键?
你是对的,那是无效的——你不能使用一对多关系作为主键的定义部分。您可能会考虑做的是添加一个唯一loan_id
性,您将其作为主键的一部分,而不是贷款包含的项目;那么单个贷款由其客户和贷款 ID(或客户、日期和贷款 ID)定义。
如果这不起作用,请创建date_leant
一个日期时间字段,并提高其精度,直到您不可能(在系统的限制内)同时发生两笔贷款 - 单个客户进行交易的可能性有多大几毫秒内的两个单独的贷款?
请注意,这不会阻止 LOAN 实体作为“一个”参与关系;这只是意味着您不能使用“许多”来定义弱实体。
实际上,您可以这样做。
请记住,LOAN 的主键将仅取决于日期+客户标识符。只要“can make”关系上的最大基数为“1”(即,贷款仅与 1 个客户相关),就可以使用 LOAN 来确定主键。
ITEM 表会将贷款的(单个)标识符(customerID + date)作为 ITEM 中的外键。LOAN 的主键不受此建模的影响。