SQL为频繁列创建新表
我正在设计一个数据库,其中有几个名为Staff、Member、Supporter等的表。每个表中都有列:street、city、state、country、postal code。由于这些列经常出现,是否应该创建一个单独的表来处理所有这些列,并从每个表中引用这些列?如果是的话,我会怎么做?为每个地址创建一个ID,以便我可以在地址表中获得正确的地址?从我开始,您需要为地址详细信息创建单独的表。在地址详细信息中添加两列以供参考SQL为频繁列创建新表,sql,Sql,我正在设计一个数据库,其中有几个名为Staff、Member、Supporter等的表。每个表中都有列:street、city、state、country、postal code。由于这些列经常出现,是否应该创建一个单独的表来处理所有这些列,并从每个表中引用这些列?如果是的话,我会怎么做?为每个地址创建一个ID,以便我可以在地址表中获得正确的地址?从我开始,您需要为地址详细信息创建单独的表。在地址详细信息中添加两列以供参考 主ID->为一个表定义一个唯一ID。e、 g.员工1001,成员1002
你试图追求的基本东西叫做规范化,通常是一件好事。您可以在此处阅读更多信息: 我是一个短语“正常化,直到它受伤,非正常化,直到它工作”的粉丝。你是否需要像搜索所有地址及其相关记录这样的事情,不管类型如何?是否需要在同一地址找到所有人,无论他们是员工、成员还是支持者?这些都是将地址规范化为单个表的重要原因 但是,你是否需要像邮局那样将地址视为一级实体?如果需要将它们区分开来,则可能需要多个实体指向同一地址。但在这种情况下,你谈论的是一种多对多的关系,这增加了复杂性,而且不一定令人满意,即使这是一种更准确的“真实世界”模型。如果您可以使用由不同关系指向的一些重复地址,或者不期望重复地址,那么您可以避免这种复杂性 你问的问题很好。这些事情都是情境性的,如果你要拥有一个大型的复杂系统,你应该彻底地考虑数据的用例,并获得帮助,直到你有足够的信心不去问这样一个简单的问题
如果您只是在练习或设计一个相对简单的系统,那么您可能应该按照所述规范化数据。我只需要一个“地址”表,每行都有一个ID。您可以将它们作为个人/角色分开。您将有一个角色表(即员工、成员、支持者等)和一个人员表(姓名、地址、街道、城市等) 这使您可以完全控制人员和角色的关系,包括一个人何时是支持者、何时成为成员、何时被雇佣为员工之类的历史 以这把小提琴为例:
((请原谅fiddle,这是我第一次使用sqlfiddle。在不了解数据库的情况下,我选择了MySQL))我忘了提到连接表“PersonRoles”,它将personid和roleid分配给PersonRoles的唯一索引。再加上时间戳和中提琴!