sql >> データベース >  >> RDS >> Mysql

リレーショナルデータベースの設計複数のユーザータイプ

    あなたのケースはクラス/サブクラスのインスタンスのように見えます。

    サブクラスを処理するSQLテーブルを設計する2つの古典的な方法があります。それぞれに長所と短所があります。

    1つの方法は、「単一テーブル継承」と呼ばれます。この設計では、すべてのタイプのユーザーに対して1つのテーブルしかありません。特定の列が特定の行に関係しない場合、交差はNULLのままになります。ユーザータイプを示す列を追加できます。

    もう1つの方法は、「クラステーブル継承」と呼ばれます。これは、Nanegoが出した答えとよく似ていますが、いくつかの小さな変更があります。すべての共通データとIDフィールドを含むユーザー用のテーブルが1つあります。サブクラスごとに1つのテーブルがあり、そのサブクラスに関連するデータが含まれています。 idフィールドは、多くの場合、usersテーブルの一致する行のidフィールドのコピーとして設定されます。このようにして、サブクラスキーは、主キーとユーザーテーブルを参照する外部キーの両方として機能する二重の役割を果たします。この最後の手法は「共有主キー」と呼ばれます。挿入時に少しプログラミングが必要ですが、それだけの価値はあります。関係の1対1の性質を強制し、必要な結合を高速化します。

    これら3つのデザインはすべて、SOのタグとして、またはWeb上の記事として検索できます。



    1. SQLでDateTime形式から時刻を取得するにはどうすればよいですか?

    2. フィルタリングされたデータをJFreeChartに表示する方法

    3. 複数の値を持つFIND_IN_SET

    4. ORDERBYの最適化