SQL为频繁列创建新表

时间:2013-11-02 07:07:44

标签: sql

我正在设计一个数据库,有几个名为Staff,Member,Supporter等的表。在每个表中都有列:街道,城市,州,国家,邮政编码。是否应该创建一个单独的表来处理所有这些列并从这些表中引用每个列,因为这些列经常出现?如果是这样,我该怎么做?为每个地址创建一个ID,以便我可以在地址表中获得正确的地址?

3 个答案:

答案 0 :(得分:1)

您尝试追求的基本事物称为规范化,通常是一件好事。您可以在此处详细了解:http://en.wikipedia.org/wiki/Database_normalization

我喜欢“正常化直到它受伤,反正常直到它起作用”。您是否需要搜索所有地址及其相关记录,无论其类型如何?需要找到同一地址的每个人,无论他们是员工,会员还是支持者?这些事情是将地址标准化为单个表格的令人信服的理由。

但是,您是否需要将地址视为第一顺序实体,邮局的方式呢?如果您需要它们是不同的,您可能希望有多个实体指向同一地址。但在这种情况下,你正在谈论多对多关系,这增加了复杂性,即使它是一个更准确的“真实世界”模型,也不一定是理想的。如果您可以使用不同关系指向的某些重复地址,或者不希望重复,那么您可以节省自己的复杂性。

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

如果您只是练习或设计一个相对简单的系统,那么您应该按照描述标准化数据。我只有一个“地址”表,每行都有一个ID。

答案 1 :(得分:0)

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

  1. 主ID - >您为一个表定义一个唯一的Id。例如1001 For Staff,1002 For Members ...等。
  2. 交易ID - >如果任何记录插入了该ID,则使用此事务ID进行链接。

答案 2 :(得分:0)

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

这使您可以对人员和角色进行全面的关系控制,包括一个人何时成为支持者,成为会员以及被雇用为员工的历史。

考虑这个小提琴:http://sqlfiddle.com/#!2/3826c/5/0

((原谅小提琴,这是我第一次使用sqlfiddle。不知道你的数据库,我选择了MySQL))