涉及来自另一个表的多行的字段

时间:2015-07-08 05:16:40

标签: sql database field

我创建/创建了3个表:从属公民突发事件

如何处理涉及多个公民奴隶事件? 现在我正在考虑在突发事件中包含两个字段,其中包含CitizenID和SlaveID的列表(SlaveID1,SlaveID2 ......,SlaveIDn),但它看起来很愚蠢。

3 个答案:

答案 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*
)

*标记表示列是主键的一部分。这确保了公民约翰和奴隶帕特里克之间只有一种关系。