假设您有一位有一家餐馆的厨师,反之亦然。因此,如果使用one-to-one
关系,您将在cooks表中使用主键id
,并将cook_id
作为restaurants表中的主键和外键。
那么您如何表示餐厅与其客户之间one-to-many
的关系?由于餐厅没有自己的ID,customer表是否有自己的id
,然后包含cook_id
的外键?
编辑:我想到了一个更好,更现实的例子。假设您有一份只有一个报价的工单。您将在id
表中找到工作订单quotes
,因为它是1对1。作为一个引用,它必然会改变,同样的特定报价也会被修改。如果要记录对引用(或某种历史记录日志)所做的修订,则需要类似quote_revisions
表的内容。在这种情况下,工单只有一个报价,报价可以有很多报价修订。您使用哪些ID链接quotes
和quotes_revisions
表?
答案 0 :(得分:2)
由于你有一对一的关系,厨师的身份证也是餐馆的身份证。您可以通过将客户键与表(客户或其他表)中的厨师/餐厅键相关联来将客户与餐馆联系起来。通过在客户的密钥上放置一个唯一约束来强制执行一对多基数,这样他们就无法与多个餐厅/厨师相关联。
答案 1 :(得分:1)
使用Work_order示例:
wo_id
,可能是AUTO_INCREMENT
。wo_id
相同,但不会AUTO_INCREMENT
。INDEX(wo_id)
,但PK的其他一些列。 Work_order和Quotes为“1:1”,由wo_id
提供。
行情和Quote_revisions为“1:N”;两个表中的wo_id
都提供了这种关系。
拥有1:1很少有用,但您的示例可能是一个很好的用例。 (一张桌子相对较大而且是静态的,另一张桌子相对较小且经常更换。)
答案 2 :(得分:0)
我会将restaurant_id
字段作为餐厅表中的主键,并将cook_id
作为外键。是的,这种结构既支持一对多的关系,也支持一对一的关系,但我相信每个实体都应该拥有自己的ID。如果您愿意,可以对外键设置唯一约束,以确保关系保持一对一。或者你可以简单地拥有一个餐厅餐桌,其中包括有关其主厨的信息。