将几个不同类型的表与公共列组合在一起

时间:2013-06-13 09:45:59

标签: sql-server

我正在创建一个拥有6种不同用户类型(web_users,sellers,repair_centers,...)的数据库,它们都有常用选项(列),这些选项将被大量使用,但每个用户都有一些独特的列其他用户类型没有。

现在我想知道创建一个具有公共列的用户表并使用另一个表作为这些唯一列的选项表是否明智,还是应该为每个用户类型创建一个单独的表?

编辑:实际上所有不同类型的网站都有相同的功能。差异就像卖家可以有一个web_users不能的标识。生产者有其他人没有的Producer_ID(由政府定义),...... 并且所有这些唯一列都是固定值,不对它们执行任何操作。

1 个答案:

答案 0 :(得分: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 Fiddle View