我正在尝试创建一个存储设备表和操作表的数据库。每个设备将与多个操作相关联。动作之间会有很多重叠。例如,iPhone 和 Android 手机都会有诸如“摇动”、“滑动”等基本动作。为了避免创建许多重复的动作,我计划引入第三个表,通过它们的 ID 将设备映射到动作。整个设置看起来像这样:
这是最好的方法吗?还是只复制动作更有效?有其他方法的建议吗?
我正在尝试创建一个存储设备表和操作表的数据库。每个设备将与多个操作相关联。动作之间会有很多重叠。例如,iPhone 和 Android 手机都会有诸如“摇动”、“滑动”等基本动作。为了避免创建许多重复的动作,我计划引入第三个表,通过它们的 ID 将设备映射到动作。整个设置看起来像这样:
这是最好的方法吗?还是只复制动作更有效?有其他方法的建议吗?
这取决于其余的数据。
如果 iPhone 的“Shake”行与 Android 的“Shake”行不同(查看其余数据时),那么您不妨使用 Actions 表中的外键直接访问您的 devices 表和跳过映射表。
但是,如果您的操作和设备确实是多对多的,那么您当前的架构是有意义的。
正如马特已经指出的那样,如果关系是多对多的,那么您当前的模式是有意义的。从你的描述看好像是这样的。
这是我建议的一项更改:“具有更多信息的其他列”标题应出现在 Devices 表和 Map 表以及 Actions 表中。仅与设备有关的信息将显示在设备表中。仅与操作相关的信息将显示在操作表中。
并且仅在给定设备的上下文中与给定操作相关的信息将显示在映射表中。
地图是中间表的好名字。但是,如果您开始查看有关数据库设计的文献,您会发现它通常被称为链接表、关联表、联结表或其中之一的变体。