カスタムフィールドを持つユーザーデータベースをどのように設計しますか
この質問は、データベースをどのように設計する必要がありますか?それは、より良いソリューションになるものに応じて、リレーショナル/ nosqlデータベースにすることができます 「会社」と「ユーザー」を追跡するデータベースを含むシステムを作成する必要があるという要件があるとします。1人のユーザーは常に1つの会社にのみ属します ユーザーは1つの会社にのみ所属できます 会社は多くのユーザーを持つことができます 「会社」テーブルの設計は非常に簡単です。会社には次の属性/列があります:(簡単にしましょう) ID, COMPANY_NAME, CREATED_ON 最初のシナリオ シンプルでわかりやすい、ユーザーはすべて同じ属性を持っているため、これはリレーショナルスタイルのユーザーテーブルで簡単に実行できます。 ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CREATED_ON 2番目のシナリオ さまざまな企業がユーザーのさまざまなプロファイル属性を保存する場合はどうなりますか。各会社には、その会社のすべてのユーザーに適用される定義済みの属性セットがあります。 例えば: 会社Aは、LIKE_MOVIE(ブール値)、LIKE_MUSIC(ブール値)を保管したいと考えています。 会社Bが保存したい:FAV_CUISINE(文字列) 会社Cは、OWN_DOG(ブール値)、DOG_COUNT(整数)を保存したい アプローチ1 ブルートフォースの方法は、ユーザーに単一のスキーマを持たせ、彼らが会社に属していない場合にnullを持たせることです: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, LIKE_MOVIE, LIKE_MUSIC, FAV_CUISINE, OWN_DOG, DOG_COUNT, CREATED_ON 多くのNULLと、それらに関係のない列を持つユーザー行(つまり、会社Aに属するすべてのユーザーはFAV_CUISINE、OWN_DOG、DOG_COUNTのNULL値を持つ)になってしまうため、これはやや厄介です アプローチ2 2番目のアプローチは、「自由形式フィールド」を持つことです。 ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CREATED_ON カスタムフィールドとは何なのかわからないため、それ自体は厄介です。データ型は、格納されている値を反映しません(たとえば、int値をVARCHARとして格納します)。 アプローチ3 …