Python 用三个表连接一对多?

Python 用三个表连接一对多?,python,mysql,database,sqlalchemy,Python,Mysql,Database,Sqlalchemy,你好,我在一个网站上学习烧瓶,我遇到了一个我似乎无法解决的问题 我想尝试创建一个通过主键连接的一对多表。这个想法是,用户可以创建一个字符,如果类型是原始的,我可以调出原始表并根据其id显示字符 我的问题是:这可能吗?如果可能的话,我应该这样做,还是根据谁创造了角色而不是他们的id来连接他们 这是我想尝试做的事情的示意图: 这可能吗?如果可能,我应该这样做吗 根据创建角色的人而不是他们的 身份证 这是可能的,您也可以基于创建者将它们连接起来 根据数据是什么样的以及您试图实现的目标,有许多可能性。

你好,我在一个网站上学习烧瓶,我遇到了一个我似乎无法解决的问题

我想尝试创建一个通过主键连接的一对多表。这个想法是,用户可以创建一个字符,如果类型是原始的,我可以调出原始表并根据其id显示字符

我的问题是:这可能吗?如果可能的话,我应该这样做,还是根据谁创造了角色而不是他们的id来连接他们

这是我想尝试做的事情的示意图:

这可能吗?如果可能,我应该这样做吗 根据创建角色的人而不是他们的 身份证

这是可能的,您也可以基于创建者将它们连接起来

根据数据是什么样的以及您试图实现的目标,有许多可能性。我在下面列出3个

可能性1 可以创建包含所有三个连接的视图。如果您有一个单独在Fandom表中引用的字符记录,那么视图将使原始表和副本表中的列为null

对于一张唱片来说,看起来有点像这样

这里的问题是,在数据库中很难强制执行一个约束,以确保三个表中只有一个引用任何单个字符记录。您必须在应用程序中强制执行此约束

可能性2 你也可以用不同的方式设置你的桌子。如果引用角色表的所有三个表都具有相同的字段,那么您可以将它们合并到一个表中,并具有一个类型字段,其中可能的值为(原始、粉丝、副本)

可能性3 如果这些表没有相同的确切字段,那么可以使用多条记录组成一个实体。比如说

TableA
- id 
- field1
- field2
- field3

TableB
- id 
- field4
- field5
- field6
您可以将上面的表A和表B替换为一个表,这两个表是原始表、粉丝表和地下城表的基础。如下所示

TableC
- id
- entity_id (shared among all the records that make up one entity)
- char_id
- field_name (possible values field1, field2, ..., field6)
- value
在任何情况下,创建者的详细信息(如名称等)都应该在其自己的表中,并在所有其他表中引用。这些数据不应该像当前一样在所有表中重复

这可能吗?如果可能,我应该这样做吗 根据创建角色的人而不是他们的 身份证

这是可能的,您也可以基于创建者将它们连接起来

根据数据是什么样的以及您试图实现的目标,有许多可能性。我在下面列出3个

可能性1 可以创建包含所有三个连接的视图。如果您有一个单独在Fandom表中引用的字符记录,那么视图将使原始表和副本表中的列为null

对于一张唱片来说,看起来有点像这样

这里的问题是,在数据库中很难强制执行一个约束,以确保三个表中只有一个引用任何单个字符记录。您必须在应用程序中强制执行此约束

可能性2 你也可以用不同的方式设置你的桌子。如果引用角色表的所有三个表都具有相同的字段,那么您可以将它们合并到一个表中,并具有一个类型字段,其中可能的值为(原始、粉丝、副本)

可能性3 如果这些表没有相同的确切字段,那么可以使用多条记录组成一个实体。比如说

TableA
- id 
- field1
- field2
- field3

TableB
- id 
- field4
- field5
- field6
您可以将上面的表A和表B替换为一个表,这两个表是原始表、粉丝表和地下城表的基础。如下所示

TableC
- id
- entity_id (shared among all the records that make up one entity)
- char_id
- field_name (possible values field1, field2, ..., field6)
- value

在任何情况下,创建者的详细信息(如名称等)都应该在其自己的表中,并在所有其他表中引用。这些数据不应该像现在一样重复在所有的表中。

尽管你已经接受了答案(虽然我很想知道你选择了哪一个选项,为什么),但是我认为你应该认真考虑使用这个用例。谢谢你的评论。我不知道标签联接表继承的定义。您是否同意在我的回答中使用可能性2可以实现这一点?我正在考虑尝试可能性3,但我也将研究联接表继承!谢谢。虽然你已经接受了答案(虽然我很想知道你选择了哪一个选项,为什么),但我认为你应该认真考虑使用这个用例。谢谢你的评论。我不知道标签联接表继承的定义。您是否同意在我的回答中使用可能性2可以实现这一点?我正在考虑尝试可能性3,但我也将研究联接表继承!非常感谢。