这可能吗?如果可以,我应该这样做还是
根据谁创建角色而不是他们的角色来连接他们
身份证?
可以,也可以根据创建者进行连接。
根据数据的性质和您要达到的目标,有多种可能性。我在下面列出了 3 个
可能性 1
您可以创建一个包含所有三个连接的视图。如果你有一个单独在 Fandom 表中引用的角色记录,那么视图中 Original 和 Dungeon 表中的列将为空。
对于单个记录
,这看起来有点像这样
CharacterView
- Character.id - is not null
- Character.creator - is not null
- Character.field1 - is not null
- Character.fieldN - is not null
- Original.id - is null
- Original.field1 - is null
- Original.fieldN - is null
- Fandom.id - is not null
- Fandom.field1 - is not null
- Fandom.fieldN - is not null
- Dungeon.id - is null
- Dungeon.field1 - is null
- Dungeon.fieldN - is null
这里的问题是很难在数据库中强制执行一个约束来确保三个表中只有一个表引用任何单个字符记录。您必须在应用程序中强制执行此约束。
可能性 2
您也可以以不同的方式设置您的桌子。如果引用字符表的所有三个表都具有相同的字段,那么您可以将它们组合到一个表中并具有一个类型字段,其中可能的值是(Original、Fandom、Dungeon)。
Combined Table
- id
- commonField1
- commonFieldN
- Type (possible choices: Original, Fandom, Dungeon)
可能性 3
如果这些表没有完全相同的字段,那么您可以使用多条记录来组成一个实体。例如
TableA
- id
- field1
- field2
- field3
TableB
- id
- field4
- field5
- field6
您可以用一张表替换上面的表 A 和 B,它们与您的原始表、Fandom 和 Dungeon 表类似。如下图所示
TableC
- id
- entity_id (shared among all the records that make up one entity)
- char_id
- field_name (possible values field1, field2, ..., field6)
- value
在任何情况下,创建者的详细信息(如姓名等)都应该在他们自己的表中,并在所有其他表中引用。该数据不应像当前那样在所有表中重复。