我创建/创建了3个表:从属,公民和突发事件。
如何处理涉及多个公民和奴隶的事件? 现在我正在考虑在突发事件中包含两个字段,其中包含CitizenID和SlaveID的列表(SlaveID1,SlaveID2 ......,SlaveIDn),但它看起来很愚蠢。
答案 0 :(得分:2)
实际上你的想法听起来并不愚蠢。您可以像这样设计Incidents
表:
+------------+-----------+---------+
| 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时,您可以获取事件中涉及的所有公民和奴隶的列表。这是数据库模式中的多对多关系。
答案 1 :(得分:2)
您可以通过制作2个桥接表和一个主表来实现它
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)
答案 2 :(得分:1)
您正在寻找多对多关系。
基本上你可以摆脱一张桌子:
CREATE TABLE [dbo].[incidents](
citizen_id*
,slave_id*
)
*标记表示列是主键的一部分。这确保了公民约翰和奴隶帕特里克之间只有一种关系。