1

6 つの異なるユーザー タイプ (web_users、sellers、repair_centers、...) を持つデータベースを作成しています。それらにはすべて、よく使用される共通のオプション (列) がありますが、それぞれに他のユーザー タイプのいくつかの固有の列があります。持っていません。

ここで知りたいのは、共通の列を持つユーザー テーブルを 1 つだけ作成し、それらの一意の列のオプション テーブルとして別のテーブルを使用すること、またはユーザー タイプごとに個別のテーブルを作成することです。

編集:実際には、すべての異なるタイプが Web サイトで同じ機能を持ちます。違いは、売り手は web_users ができないロゴを持つことができるようなものです。プロデューサーには、他のプロデューサーにはない Producer_ID (政府によって定義されている) があり、....そして、これらの一意の列はすべて固定値であり、操作は行われません。

4

1 に答える 1

1

興味深い質問です。私だったら、2 つのテーブルを使用します。1 つはすべての共通プロパティ用で、もう 1 つはすべてのユーザーの外部プロパティ用です。このようなもの:

  CREATE TABLE _UserProperties(
    ID int ,
    Property varchar(1000) ,
    Value varchar(1000) ,
    UserID int 
  ) ;
  insert into _UserProperties(id, property, value, userid)
  values (1,'employee id', '123556',1),
        (2,'CustomerID', '345677',2),
        (2,'SalesGroup', 'ABFD34',2),
        (2,'SalesToDate', '2344',2),
        (3,'Project', 'cat juggling',3);


  CREATE TABLE _Users(
    ID int ,
    UserName varchar(50) ,
    UserAddress varchar(1000) ,
    UserType varchar(50) 
  ) ;      

  insert into _Users (ID, UserName, UserAddress, UserType)
  values (1,'Fred Jones','123 Mample','Customer'),
        (2,'Sam Smith','234 Oak','Employee'),
        (3,'Sally Black','345 Pine','Consultant');

次に、次のような単純なクエリですべてを組み合わせることができます。

 select * from _users a left join _userProperties b
 on a.id = b.userid

または、ピボット テーブルを使用して行を列にします。

ここにSQLフィドルビューがあります

于 2013-06-13T10:32:17.820 に答える