2

メタ情報を保存する必要があります。この情報は、実際にはシステムにまったく影響を与えず、情報提供のみを目的としています。

たとえば、iOS アプリ、Android アプリ、モバイル Web、デスクトップ Web などの複数のアプリケーションがある場合、ログインしたユーザーがコンテンツを作成でき、そのコンテンツがアプリケーション間で表示されます。そのコンテンツがどこから作成されたのかを保存するのに役立つかもしれないと考えていました。

したがって、データベースにある場合:

 - USER table (user_id, username, password, email)
 - CONTENT table (content_id, user_id, content)

コンテンツの出所に関する情報を追加したいので、コンテンツ テーブルを次のように変更します。

- CONTENT table (content_id, user_id, content, source)

ソースの保存方法を教えてください。

  1. それは単なる列挙型クラスである必要があります(私はJavaを使用しています)

    public enum Source{ IOS_APP, ANDROID_APP, MOBILE_WEB, DESKTOP_WEB } 
    

    単純にデータベースに文字列 (varchar) として保存しますか?

  2. または、実際に追加のテーブルを作成して外部キー関係を使用する必要があります

SOURCE table (source_id, source_description)
CONTENT table (content_id, user_id, content, source_id)

どちらのアプローチがより望ましいでしょうか? 長所短所?

とにかく、ここの情報は実際にはアプリケーションに影響しません。ある意味では、これは統計情報の提供のみを目的としているため、好奇心のために振り返ってみると、「ほとんどのコンテンツはどこから来たのか」という質問に答えることができます。

4

2 に答える 2

1

IMO、どちらか一方を選択するのではなく、両方を選択する必要があります。

列挙型は Java コードをきれいに保つのに役立ち、テーブルはそのデータを整理するのに役立ちます。

そのタイプの情報用に別の (マスター) テーブルを用意するとよいでしょう。そして、他のテーブルはそれを外部キーとして参照できます。これにより、可能な値の中心的な場所が得られます。すべての可能な値を探してどこにでも行く必要はありません。

その (マスター) テーブルを表す列挙型を作成できます。また、他のテーブルのエンティティを作成する場合は、フィールド タイプとして使用できます。例としてこれを見ることができます。また、(オプションで) アプリケーションの開始時にテーブル コンテンツを含む列挙型を検証して、新しい値または追加された値または既存の値が更新された場合に、列挙型がテーブルと同期していることを確認できます。

于 2013-06-18T23:37:13.200 に答える
0

コードに列挙型を使用し、データベースに列挙型で表されるデータを含むテーブルを使用していました。また、テーブル内の ID を列挙型の値と一致させ、よく知られた列挙型の値に簡単にアクセスできるようにします。

別のアプローチは、列挙型ではなく、ID + 名前を持つクラスです (ID を列挙型の値と照合し、よく知られている列挙型の値に簡単にアクセスできるようにするために、列挙型が存在する可能性があります)。「if myEnum = MyEnum.SomeValue then」のようなコードがある場合 (つまり、列挙値を決定する必要があります)、クラスを使用してポリモーフィックな動作を行う方がよい場合があります。

PS: 私は Java 開発者ではありません。私は C# を使用しています。Java の列挙型は、実際には振る舞いを持つことができる実際のクラスだと思いますね。

于 2013-06-19T00:19:12.787 に答える