mysql 设置外键,能否将表中多个字段关联到另一个表中的同一字段
例如我现在想设计一个订单的数据库,其中一个表为“订单”,另一个表为“地址”。“订单”表中有2个字段分别为“发件地址id”和“收件地址id”,我现在想将这2个字段设置外键同...
例如我现在想设计一个订单的数据库,其中一个表为“订单”,另一个表为“地址”。
“订单”表中有2个字段分别为“发件地址id”和“收件地址id”,我现在想将这2个字段设置外键同时与“地址”表中的“地址id”这个字段关联。请问可以做到么?sql语句怎么编写?
想达到的效果是:
“订单”表中的“发件地址id”和“收件地址id”这两个字段的内容,都必须是“地址”表中“地址id”这个字段里已经有的内容。且假设当我删除“地址”表中“地址id”为1的某条记录时,“订单”表中无论是“发件地址id”还是“收件地址id”,只要包含id为1这个信息的所有相关记录都会级联删除。 展开
“订单”表中有2个字段分别为“发件地址id”和“收件地址id”,我现在想将这2个字段设置外键同时与“地址”表中的“地址id”这个字段关联。请问可以做到么?sql语句怎么编写?
想达到的效果是:
“订单”表中的“发件地址id”和“收件地址id”这两个字段的内容,都必须是“地址”表中“地址id”这个字段里已经有的内容。且假设当我删除“地址”表中“地址id”为1的某条记录时,“订单”表中无论是“发件地址id”还是“收件地址id”,只要包含id为1这个信息的所有相关记录都会级联删除。 展开
2个回答
展开全部
你要订单表中两个字段引用地址表中的一个字段,那你就在订单表中创建两个外键就行了:
ALTER TABLE order ADD CONSTRAINT address1 FOREIGN KEY (address_id) REFERENCES address;
ALTER TABLE order ADD CONSTRAINT address2 FOREIGN KEY (address_id) REFERENCES address;
你要删除的话:
delete from order where address1 = '1001' or address2 = '1001';
像这些数据,不建议做物理删除,也就是delete。你可以加一个状态字段,将它标识为无效就可以了。因为这些数据,对业务进行一些统计和数据分析都是有用的。再比如,我使用地址1下过一些订单,现在我搬家了,地址1就没用了,我要换另外一个地址。那我会删除地址1,再添加一个地址2,但我地址1的订单还是要看的吧,你总不能删除啊。而且在地址1的订单中,我要能看到地址1的地址信息。所以,这里对于地址删除,那就不能做delete了,只能做标识。标识无效后,只能代表地址在下单选择地址或一些其它操作的时候,这个无效的地址不显示,但在查看订单的时候,这个地址信息还是能显示出来的。
这个具体哪可以显示,哪不能显示,就要根据你的业务和实际情况来定了
ALTER TABLE order ADD CONSTRAINT address1 FOREIGN KEY (address_id) REFERENCES address;
ALTER TABLE order ADD CONSTRAINT address2 FOREIGN KEY (address_id) REFERENCES address;
你要删除的话:
delete from order where address1 = '1001' or address2 = '1001';
像这些数据,不建议做物理删除,也就是delete。你可以加一个状态字段,将它标识为无效就可以了。因为这些数据,对业务进行一些统计和数据分析都是有用的。再比如,我使用地址1下过一些订单,现在我搬家了,地址1就没用了,我要换另外一个地址。那我会删除地址1,再添加一个地址2,但我地址1的订单还是要看的吧,你总不能删除啊。而且在地址1的订单中,我要能看到地址1的地址信息。所以,这里对于地址删除,那就不能做delete了,只能做标识。标识无效后,只能代表地址在下单选择地址或一些其它操作的时候,这个无效的地址不显示,但在查看订单的时候,这个地址信息还是能显示出来的。
这个具体哪可以显示,哪不能显示,就要根据你的业务和实际情况来定了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询