Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL为频繁列创建新表_Sql - Fatal编程技术网

SQL为频繁列创建新表

SQL为频繁列创建新表,sql,Sql,我正在设计一个数据库,其中有几个名为Staff、Member、Supporter等的表。每个表中都有列:street、city、state、country、postal code。由于这些列经常出现,是否应该创建一个单独的表来处理所有这些列,并从每个表中引用这些列?如果是的话,我会怎么做?为每个地址创建一个ID,以便我可以在地址表中获得正确的地址?从我开始,您需要为地址详细信息创建单独的表。在地址详细信息中添加两列以供参考 主ID->为一个表定义一个唯一ID。e、 g.员工1001,成员1002

我正在设计一个数据库,其中有几个名为Staff、Member、Supporter等的表。每个表中都有列:street、city、state、country、postal code。由于这些列经常出现,是否应该创建一个单独的表来处理所有这些列,并从每个表中引用这些列?如果是的话,我会怎么做?为每个地址创建一个ID,以便我可以在地址表中获得正确的地址?

从我开始,您需要为地址详细信息创建单独的表。在地址详细信息中添加两列以供参考

  • 主ID->为一个表定义一个唯一ID。e、 g.员工1001,成员1002等
  • 事务ID->如果有任何记录插入该ID,则链接到此事务ID

  • 你试图追求的基本东西叫做规范化,通常是一件好事。您可以在此处阅读更多信息:

    我是一个短语“正常化,直到它受伤,非正常化,直到它工作”的粉丝。你是否需要像搜索所有地址及其相关记录这样的事情,不管类型如何?是否需要在同一地址找到所有人,无论他们是员工、成员还是支持者?这些都是将地址规范化为单个表的重要原因

    但是,你是否需要像邮局那样将地址视为一级实体?如果需要将它们区分开来,则可能需要多个实体指向同一地址。但在这种情况下,你谈论的是一种多对多的关系,这增加了复杂性,而且不一定令人满意,即使这是一种更准确的“真实世界”模型。如果您可以使用由不同关系指向的一些重复地址,或者不期望重复地址,那么您可以避免这种复杂性

    你问的问题很好。这些事情都是情境性的,如果你要拥有一个大型的复杂系统,你应该彻底地考虑数据的用例,并获得帮助,直到你有足够的信心不去问这样一个简单的问题


    如果您只是在练习或设计一个相对简单的系统,那么您可能应该按照所述规范化数据。我只需要一个“地址”表,每行都有一个ID。

    您可以将它们作为个人/角色分开。您将有一个角色表(即员工、成员、支持者等)和一个人员表(姓名、地址、街道、城市等)

    这使您可以完全控制人员和角色的关系,包括一个人何时是支持者、何时成为成员、何时被雇佣为员工之类的历史

    以这把小提琴为例:


    ((请原谅fiddle,这是我第一次使用sqlfiddle。在不了解数据库的情况下,我选择了MySQL))

    我忘了提到连接表“PersonRoles”,它将personid和roleid分配给PersonRoles的唯一索引。再加上时间戳和中提琴!