这3个表的规范化数据库表单是什么?

时间:2012-09-11 08:37:54

标签: sql database-design normalization

所以我有三张桌子,后来还有三张牌子:

Company (table: companies)
Person (table: people)
Address (table: addresses)

如何将这些连接在一起,考虑到每个人或公司可以有多个地址,但由于地址格式相同,我想使用一个“地址”表,因此可以完成交易/管理地址通过一个模型?

因为这个结构:

companies(id, name, ...)
people(id,name, ... )
addresses(id, foreign_id, foreign_model, ...)

对我来说似乎有点不合适。基本上这是现在的结构。 'foreign_model'字段是一个字符串,它指定地址所属的模型(即公司或人)。

所有这一切都在Cakephp下,但我对这个结构有很多问题,我该怎么用呢?

1 个答案:

答案 0 :(得分:1)

这是怎么回事:

companies(id, name, address_id,..)
people   (id,name, address_id,... )
addresses(id,... )

公司和人都指向地址表的地址。 在这里你不必存储任何重复的地址(如果有的话)

编辑:如果公司和人都可以拥有多个地址

然后保留映射表

companies(id, name,..)
people   (id,name, ... )
addresses(id,... )

Address_map(id,address_id,type)

类型说明是公司还是人民
id - >无论是公司还是诗人