【问题标题】:SQL database design for storing different types of "Person"用于存储不同类型“人”的 SQL 数据库设计
【发布时间】:2011-11-19 16:12:50
【问题描述】:

我需要使用 SQL 在关系数据库中为具有 NameLastName 等列的人创建一个表。

我将拥有三种不同类型的人:卖方、买方和客户。

每个人都有其他信息/属性。

我是否需要为每种不同类型的人创建一个表,还是可以为所有三种类型使用一个表?

如果我使用单个表,如果一种类型的“Person”(例如 Seller)具有与另一种 Person 类型不同的属性怎么办?

【问题讨论】:

    标签: sql database-design


    【解决方案1】:

    我会创建一张 Person 表,以 personId 作为主键,其中包含所有类型的公共属性。(Seller 、Buyer、Customer)

    然后我会创建 PersonTypes,一个小的参考表,它将声明不同类型的代码。

    然后,对于每种类型,我将参考 Person 表创建一个单独的表,并 包含所有唯一属性的 PersonType 表。

    【讨论】:

      【解决方案2】:

      您可以创建 1 个或两个表。当然,您可以为每个用户角色创建 3 个表。这取决于您想要达到的目标。您的问题的常见解决方案是:创建两张表,一张用于用户,一张用于他们的角色(mysql 的示例:

      Create table `person_role` (
      id int not null,
      roleName varchar(255) not null,
      PRIMARY KEY(`id`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
      
      Create table `person`(
      id int not null.
      name varchar(255) not null,
      lastName varchar(255) not null,
      role int not null,
      PRIMARY KEY(`id`),
      CONSTRAINT FOREIGN KEY(`role`) REFERENCES person_role(`id`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
      

      【讨论】:

        【解决方案3】:

        卖家可以成为买家还是客户?如果可以,请将它们全部放在同一个表中,这样您就不会拥有相同数据的单独副本。

        【讨论】:

          猜你喜欢
          • 2012-12-29
          • 1970-01-01
          • 2012-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-27
          • 2012-02-11
          • 2013-11-06
          相关资源
          最近更新 更多