我已经创建/正在创建3个表: 奴隶,公民和事件。
如果涉及多个公民和奴隶的事件,我该如何处理?现在我考虑在事件中添加两个字段,包含公民ID列表和奴隶ID列表(SlaveID1,SlaveID2 ...,SlaveIDn),但这似乎很愚蠢。
如果涉及多个公民和奴隶的事件,我该如何处理?现在我考虑在事件中添加两个字段,包含公民ID列表和奴隶ID列表(SlaveID1,SlaveID2 ...,SlaveIDn),但这似乎很愚蠢。
事故
。+------------+-----------+---------+
| IncidentID | CitizenID | SlaveID |
+------------+-----------+---------+
| 1 | A | A | <-- incident #1 involved 2 citizens and 1 slave
| 1 | B | A |
| 2 | A | A | <-- incident #2 involved 2 citizens and 2 slaves
| 2 | B | A |
| 2 | A | B |
| 2 | A | B |
+------------+-----------+---------+
现在,当您查询某个事件ID时,可以获取涉及该事件的所有公民和奴隶列表。这是您数据库模式中的多对多关系。
您可以通过创建两个桥接表和一个主表来实现此操作。
Master table
_______________
Incidents
Bridge tables
___________
incident_slave(pk of incidents table , slave information field(s) or pk of slave table)
incident_citizen(pk of incidents table , citizen information field(s) or pk of citizen table)
您正在寻找一种多对多的关系。
基本上,您可以使用以下类型的表:
CREATE TABLE [dbo].[incidents](
citizen_id*
,slave_id*
)
*标记表示该列是主键的一部分。这确保了公民约翰和奴隶帕特里克之间只有一种关系。