爲什麼將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_你想合併它們嗎?有可能有更好的方法來實現你想要實現的任何目標...... –