为什么将3个表合并为一个?会很糟糕的分贝设计。但这里有一个办法做到这一点:
一个表将有你在决赛桌要为每个3代表列的列。我想提出的假设是TableX_Hash
是同一类型的,所以仍然是一个独特的列:
Table_All_in_One (
Table1_PK1,
Table1_PK2,
Table1_PK3,
# space just for clarity of grouping
Table2_PK1,
Table2_PK2,
Table3_PK1,
Table3_PK2,
Table3_PK3,
Table3_PK4,
Table3_PK5,
TableX_Hash # Assuming all the _Hash'es are the same type+length,
# otherwise, add Table1_Hash, Table2_Hash, Table3_Hash
# This can be your new primary key
)
的主键(PKx
)被要求只在自己的表非NULL
。对于这张表,他们必须允许空值。 这个想法是,这个新表的每一行只会保存其中一个表的数据。该行的其他列将为空。如果你想一个表的行与另一个相关联,您可以添加到同一行或添加FK_Table1_Hash
,FK_Table2_Hash
和FK_Table3_Hash
列,这将是指记录的TableX_Hash
值。
PS:我不知道你真正寻找的是一个View
,而不是这个非常糟糕的所有功能于一身的表。
编辑:将它们组合成一个“不知道表有多少个主键”。按您的评论:连接成一列
店内所有_PKs:
Table_All_in_One (
New_PK,
TableX_Hash,
Table1_PKx, # Concatenated PKs of Table1
Table2_PKx, # Concatenated PKs of Table2, etc.
...,
# OR just one
TableX_PKs, # concatenate all the PK's into one VARCHAR field
# Add a pipe `|` between them optionally.
Table_Num # If using just one, then you'll need to store the table number
) 基于它们的复合主键的一部分您将不能够方便地挑选记录。它将始终是TableX_PKs = CONCAT_WS('|', Table1_PK1, Table1_PK2, ...)
。所以你唯一的依赖是原始列中PK的数量。
他们是否有外键或某种方式来识别哪些行属于一起? –
否。每个表中除Hash字段外的所有字段都是主键(复合主键)。 例如:Table1_PK1,Table1_PK2,Table1_PK3是表1中的主键 – stoney78us
请解释_why_你想合并它们吗?有可能有更好的方法来实现你想要实现的任何目标...... –