问题描述
我想做一个数据库,当我查询它时,它会给我,用户数据,扇区和子扇区(如果用户没有子扇区,它将给我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,type,super_sect)
其中 type
有两个不同的值,一个用于子行业,一个用于扇区,sect_id
和 name
是扇区或子扇区的 ID 和名称,而 super_sect
不为空,仅当 type 为 sub_sector 时,是表 Sect 的外键。
您还可以通过为扇区和子扇区提供始终不同的 id(例如奇数/偶数或不同间隔的整数)来提高效率。