首页 > 解决方案 > 外键是否必要?

问题描述

假设我有四个表:

 Table 1 - Users  - id, name
 Table 2 - Models - id, user_id, name
 Table 3 - Types  - id, user_id, name
 Table 4 - Cars   - id, user_id, model_id, brand_id

从技术上讲,我不需要表 Cars 中的“user_id”列。

使用 'user_id' fk 是一个好习惯吗?冗余?当然,它使编程更容易......

标签: mysqldatabasedatabase-designforeign-keys

解决方案


您真正不需要的是anduser_id中的列。 汽车型号和汽车类型与用户没有直接关系。 这种设计很有意义:ModelsTypes

Table 1 - Users  - id, name
Table 2 - Models - id, name
Table 3 - Types  - id, name
Table 4 - Cars   - id, user_id, model_id, type_id

如果每辆车仅与 1 个用户相关,但如果它可以与更多用户相关,那么您需要另一个表:

Table 1 - Users       - id, name
Table 2 - Models      - id, name
Table 3 - Types       - id, name
Table 4 - Cars        - id, model_id, type_id
Table 5 - CarsUsers   - car_id, user_id 

推荐阅读