如何使用空外键进行高效的数据库设计



我想创建一个数据库,当我查询它时,它会给出我、用户数据、扇区和子扇区(如果用户没有子扇区,它会给我NULL(
每个用户都有一个扇区,每个子扇区都有一个子扇区。但问题是,并不是每个用户都有一个子行业
有比我设计的这个数据库更好、更有效的方法吗?在用户表中,我使子扇区列可以为NULL

Table : user
+------------+----------+
|   Column   |   Type   |
+------------+----------+
| id_user    | INT (PK) |
| name       | Char     |
| sector     | INT(FK)  |
| sub sector | INT(FK)  |
+------------+----------+
Table : sector
+------------+----------+
|   Column   |   Type   |
+------------+----------+
| id_sector  | INT (PK) |
| sector_name| Char     |
+------------+----------+
Table : sub_sector
+----------------+----------+
|   Column       |   Type   |
+----------------+----------+
| id_sub_sector  | INT (PK) |
| sub_sector_name| Char     |
| id_sector      | INT (FK) |
+----------------+----------+

如果每个子部门都有一个唯一的部门,那么在您的架构中,当用户有一个子部门时,您就有了冗余。为了消除这种冗余,你可以设计一个这样的模式,其中有一个扇区和子扇区的表。

User(user_id, name, sect_id),其中sect_id是表Sect的非空外键

Sect(sect_id, name, type, super_sect),其中type有两个不同的值,一个用于子扇区,另一个用于扇区,sect_idname是扇区或子扇区的id和名称,而super_sect(仅当类型为sub_sector时不为null(是表Sect的外键。

您还可以通过为部门和子部门提供一致不同的id来提高效率,例如奇数/偶数,或不同间隔的整数。

最新更新