なぜ 3 つのテーブルを 1 つにまとめるのですか? 本当に悪いデータベース設計になります。しかし、これを行う方法は次のとおりです。
1 つのテーブルには、最終的なテーブルに必要な 3 つのテーブルの各列の列があります。TableX_Hash
同じタイプであると仮定しているため、1 つの一意の列として残ります。
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
このテーブルでは、NULL を許可する必要があります。この新しいテーブルの各行は、いずれかのテーブルのデータのみを保持するという考え方です。その行の他の列は空になります。あるテーブルの行を別のテーブルに関連付ける場合は、それを同じ行に追加するか、レコードの値を参照するFK_Table1_Hash
、FK_Table2_Hash
および列を追加できます。FK_Table3_Hash
TableX_Hash
PS: あなたが本当に探しているのは、View
この本当に悪いオールインワン テーブルではないのでしょうか。
編集:「テーブルが持つことができる主キーの数を知らずに」それらを1つに結合します。あなたのコメントに従って:
連結されたすべての _PK を 1 つの列に格納します。
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 の数です。