php - 一个简单的mysql数据问题
怪我咯
怪我咯 2017-04-10 15:03:12
0
5
357

people表
id peoplename

orders表
id productname people(请问这里存people的id还是直接复制字段)

直接放id的话,如果people被删除的话,怎么办?
直接复制字段的话,如果修改people表中的数据,同时也要修改orders表的数据对吗?

这两种理解对吗?
大家平时实际操作的时候怎么处理的

谢谢

怪我咯
怪我咯

走同样的路,发现不同的人生

reply all (5)
迷茫

第一选择放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表的冗余字段.

    PHPzhong

    应该是

    people: id peoplename orders: id productname pid comment "people id"

    如果people被删除,合理的话,相关的orders应该也被删除;保存的话,会产生冗余数据。
    楼主,people有可能被删除了吗?用户一般不被删除。

      Ty80

      同意楼上的,people一般不会被删除。如果真的要删除people的话,可以在程序中增加事务管理,级联删除people和order,如果删除失败就回滚。或者只是使用外键,并增加级联删除的约束。

        黄舟

        orders表存people的id,建议修改people表时不要直接删除,加一个inuse字段表示是否有效。

          伊谢尔伦

          建议设计表结构的初学者先学习下三范式

            Latest Downloads
            More>
            Web Effects
            Website Source Code
            Website Materials
            Front End Template
            About us Disclaimer Sitemap
            php.cn:Public welfare online PHP training,Help PHP learners grow quickly!