0

データベースを構築し、さまざまな種類のアイテムに対して約 8 つの異なるテーブルを用意しました。これを行ったのは、各テーブルがカテゴリであり、各アイテムに異なるフィールドがあるため、すべてを 1 つのテーブルにすることができなかったからです。私が直面している問題は、itemID フィールドをすべてのテーブルで一意にする必要があることです。各テーブルに固有のものだけではありません。

たとえば、管理者が 1 つのテーブルにアイテムを追加する場合、そのアイテムの itemID を別のテーブルの別のアイテムと重複させることはできません。そうしないと、問題が発生します。これを正しく設定するのを手伝ってください。これをデータベースで直接行うことはできますか? または、アイテム番号が既に存在するかどうかを確認するために php スクリプトを作成する必要がありますか?

私はそれを正しく説明したことを願っています。:)

4

3 に答える 3

0

これを行う最も簡単な方法は、各 PK を変換してGUIDを使用することです。ID と GUID の相対的なメリットについて説明しているJeff Atwoodによる優れた記事があります。MySQL にはUUIDを生成する関数さえあります。警告、私はこの機能を使用したことがなく、レプリケーションに関していくつかの問題があったことは理解していますが、それらは最近のバージョンで修正されていると思います.

これを実現するもう 1 つの方法は、エンティティ自体を制御する別のテーブルを用意し、自動インクリメントを使用して ID を一意に保つことです。個々のテーブルはそれぞれ、このテーブルを参照します。これは、データの整合性を維持するためのアプリケーション ロジックの点ではもう少し複雑ですが、可能です。

または、2 番目のオプションに従ってマスター テーブルを作成し、別のカテゴリ間で異なるパラメーターのキーと値のペアを含む別のテーブルを 1 つ作成することもできます。これは、追加のパラメーターがすべてメイン エンティティ情報 (カテゴリ間で変化しない) の二次的なものである場合に適したオプションです。

どのオプションが最適かは、データ モデルの構造とセマンティクス、およびユース ケース (つまり、最も頻繁にデータにアクセスする方法) によって異なります。

この種の継承構造をリレーショナル データベースにマッピングする方法の詳細については、こちらを参照してください。もちろん、MySQL 以外にも目を向けるなら、この種のシナリオにより適したさまざまな NoSQL データベースがあります。

于 2012-05-26T11:12:39.160 に答える
0

一意の ID (GUID など) を生成し、それをキーとして (または代替の一意のキーとして) 使用します。または、一意の ID を持つ Entities という名前のテーブルを作成し、それに外部キーを追加します。アイデアは、エンティティに挿入し、ID を取得してから、それを使用して子テーブルに挿入することです。

二度とこの間違いをしないようにしましょう。:(

于 2012-05-26T10:59:54.920 に答える
0

グローバルに一意のフィールドを保持するテーブルを作成します。これが親テーブルになります。

他のすべてのグローバルに一意のフィールドを、新しいテーブル (フィールド) を指す外部キーにします。これらは子テーブルになります。

挿入時には、子テーブルに挿入する前に必ず新しい値を親テーブルに挿入してください (そうしないと、整合性違反が発生します)。

更新時には、子テーブルではなく親テーブルでのみ一意のフィールドを常に更新するようにしてください。

子テーブルの外部キーにさらに一意の制約を追加して、同じ親テーブルの値を指すことができないようにします。

于 2012-05-26T10:56:03.673 に答える