【发布时间】:2015-12-27 02:32:01
【问题描述】:
注意:这个问题可能问得不好,因为我对 SQL 的了解非常有限。
我们有 3 张桌子,BUILDINGS、FLOORS、ROOMS。
BUILDINGS 包含以下列:Building_ID(其主键)和 Name(其名称)
FLOORS 包含以下列:Floor_ID(其主键)、Name(其名称)和 Building_ID(BUILDINGS 主键的外键)
ROOMS 包含以下列:Room_ID(其主键)、Name(其名称)、Building_ID(BUILDINGS 主键的外键)和 Floor_ID(外键) FLOORS的主键)
我的问题是,如果我有两栋楼,1 和 2,还有两层楼,1 和 2,如果 1 楼属于 1 号楼,2 楼属于 2 号楼(即 2 号楼没有 1 楼,并且 1 号楼没有 2 楼)可以添加一个位于 1 号楼 2 楼的房间,即使这不应该存在。
如何更正我的结构以确保只能添加有效房间?如果我再次向外扩展,另一个表 DESKS 将具有关联的 BUILDING、FLOOR 和 ROOM > 这个解决方案还能用吗?
【问题讨论】:
-
1.规范化:ROOMS 表不需要“Building_id”,因为 FLOORS 表已经存在这种关系。 2.一个楼层只能属于一个建筑物:需要在FLOORS表中定义一个复合唯一索引(Floor_id, Building_id)。
标签: mysql sql foreign-keys innodb