涉及另一张表中多行的字段

4
我已经创建/正在创建3个表: 奴隶公民事件

如果涉及多个公民奴隶事件,我该如何处理?现在我考虑在事件中添加两个字段,包含公民ID列表和奴隶ID列表(SlaveID1,SlaveID2 ...,SlaveIDn),但这似乎很愚蠢。


1
你有许多对许多的关系。您可以添加两个表格incidentCitizens和incidentSlaves。公民和奴隶之间的关系是什么? - Giorgi Nakeuri
@Salvador,你应该仔细审查下面给出的答案,并向我们展示一些绿色 ^ ^。 - Tim Biegeleisen
@GiorgiNakeuri 市民可以拥有多个奴隶,但市民行中不包含有关此信息,只有奴隶行指示拥有该奴隶的市民(这听起来很可怕):D - Salvador
感谢 @TimBiegelsen、timus2001 和 evictednoise 的回答!现在回到桌子前 ^__^ - Salvador
3个回答

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时,可以获取涉及该事件的所有公民和奴隶列表。这是您数据库模式中的多对多关系。


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)

1

您正在寻找一种多对多的关系。

基本上,您可以使用以下类型的表:

CREATE TABLE [dbo].[incidents](
    citizen_id*
    ,slave_id*
)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接