84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
people表id peoplename
orders表id productname people(请问这里存people的id还是直接复制字段)
直接放id的话,如果people被删除的话,怎么办?直接复制字段的话,如果修改people表中的数据,同时也要修改orders表的数据对吗?
这两种理解对吗?大家平时实际操作的时候怎么处理的
谢谢
走同样的路,发现不同的人生
第一选择放id, 加外键约束. 关于你说的"直接放id的话,如果people被删除的话,怎么办", mysql在外键约束上有三个选项:1. CASCADE: people表删除, 相应的order表的 记录也被删掉;2. SET NULL: people表删除, 相应的order表的 记录 的列被置空;3. RESTRICT(NO ACTION): 如果order表有相应的记录, 则对people表的删除 不被允许.见: http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
这大概可以解决你的问题了.
对存people直接复制字段, 除非这里的 people, order表操作 确实成为了性能瓶颈, 并且实测 直接复制字段 确实可以提高性能. 这样增加了冗余数据, 缺点: 1. 需要的存储空间增大; 2. 需要自己维护 order表和 people表的冗余字段.
应该是
people: id peoplename orders: id productname pid comment "people id"
如果people被删除,合理的话,相关的orders应该也被删除;保存的话,会产生冗余数据。楼主,people有可能被删除了吗?用户一般不被删除。
同意楼上的,people一般不会被删除。如果真的要删除people的话,可以在程序中增加事务管理,级联删除people和order,如果删除失败就回滚。或者只是使用外键,并增加级联删除的约束。
orders表存people的id,建议修改people表时不要直接删除,加一个inuse字段表示是否有效。
建议设计表结构的初学者先学习下三范式
第一选择放id, 加外键约束. 关于你说的"直接放id的话,如果people被删除的话,怎么办", mysql在外键约束上有三个选项:
1. CASCADE: people表删除, 相应的order表的 记录也被删掉;
2. SET NULL: people表删除, 相应的order表的 记录 的列被置空;
3. RESTRICT(NO ACTION): 如果order表有相应的记录, 则对people表的删除 不被允许.
见: http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
这大概可以解决你的问题了.
对存people直接复制字段, 除非这里的 people, order表操作 确实成为了性能瓶颈, 并且实测 直接复制字段 确实可以提高性能. 这样增加了冗余数据, 缺点: 1. 需要的存储空间增大; 2. 需要自己维护 order表和 people表的冗余字段.
应该是
如果people被删除,合理的话,相关的orders应该也被删除;保存的话,会产生冗余数据。
楼主,people有可能被删除了吗?用户一般不被删除。
同意楼上的,people一般不会被删除。如果真的要删除people的话,可以在程序中增加事务管理,级联删除people和order,如果删除失败就回滚。或者只是使用外键,并增加级联删除的约束。
orders表存people的id,建议修改people表时不要直接删除,加一个inuse字段表示是否有效。
建议设计表结构的初学者先学习下三范式