先说个例子吧:
一个表table包括:编号,姓名,性别,血型,星座,属相。
可是血型有四种,星座有十二个,属相也十二个,这些是固定不变的。
如果这些都直接写入数据库的话就会显的冗余。
这个可以跟常见的那个学生信息表与成绩表相对应着看,我们没有直接把成绩写入信息表中,而是用了外键。
所以我们可以把血型设置为一个表:血型表,星座设置为一个表:星座表,属相设置为一个表:属相表。然后在表table中引用外键。这个表引用了三个外键。
这个例子可能不是很好,可是就是这个道理:
为了设计的需要,一个表有几个外键是没有关系的,也不能说越多越好,这主要看我们的实际需要,而且还要使数据“完整”。
啰嗦了这么多希望你能明白。
你要订单表中两个字段引用地址表中的一个字段,那你就在订单表中创建两个外键就行了: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了,只能做标识。标识无效后,只能代表地址在下单选择地址或一些其它 *** 作的时候,这个无效的地址不显示,但在查看订单的时候,这个地址信息还是能显示出来的。
这个具体哪可以显示,哪不能显示,就要根据你的业务和实际情况来定了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)