-1

複数のテーブルのハッシュテーブルを1つのテーブルに表現する方法を見つけるのに問題があります。

次の形式のテーブルが3つあるとします。

Table1(Table1_PK1,Table1_PK2,Table1_PK3,Table1_Hash)
Table2(Table2_PK1,Table2_PK2,Table2_Hash)
Table3(Table3_Pk1,Table3_PK2,Table3_PK3,Table3_PK4,Table3_PK5,Table3_Hash)

Table1_PK1、、...は列であり、異なるデータ型(、、または...)を持つ場合Table1_PK2があります。私の質問は、これら3つのテーブルすべてを表すことができる単一のテーブル(固定数の列)を作成する方法があるかどうかです(より実用的かもしれません)。Table1_PK3VARCHARINTDATETIME

私は自分のデータベースツールでこれを行おうとしています。各テーブルは、実際には、主キーとそれに関連付けられたハッシュデータを含むテーブルです。

4

3 に答える 3

1

データベースではなくデータベース ツールを構築しているように見えるため、データベース テーブルではなくアプリケーション コードでこれを行う方が理にかなっています。

別の回答で、あなたはコメントしました

テーブルが持つことができる主キーの数を知らなくても、それを行う動的な方法をまだ探しています。

テーブルは主キーを 1 つだけ持つことができます。ただし、その主キーは複数の列で構成できます。(あなたはすでにこれを知っていました.あなたは間違った言葉を使っていたので、他の人を混乱させるかもしれません.)

テーブルには、任意の数の他のキーを含めることもできます。これらのキーは、(としてNOT NULL UNIQUE) 宣言されるか、または「宣言されていない」(一連の列に対して一意性を保証するインデックスを作成することにより) のいずれかになります。

2 つの方法のいずれかまたは両方を使用して、実行時にそれらすべてを調べることができます。(リンクは PostgreSQL のドキュメントに移動します。)

私の知る限り、最新の SQL プラットフォームはすべて、これらのインターフェイスの少なくとも 1 つを実装しています。information_schema ビューは SQL 標準でカバーされていますが、解釈の余地があるようです。すべてのプラットフォームでまったく同じように見えるわけではありません。

于 2012-09-01T11:37:57.707 に答える
0

なぜ 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_HashFK_Table2_Hashおよび列を追加できます。FK_Table3_HashTableX_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 の数です。

于 2012-08-31T17:51:09.603 に答える