0

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

4

3 回答 3

1

您试图追求的基本事物称为规范化,通常是一件好事。您可以在此处阅读更多相关信息: http ://en.wikipedia.org/wiki/Database_normalization 。

我很喜欢“规范化直到它受伤,非规范化直到它起作用”这句话。无论类型如何,您是否需要执行搜索所有地址及其相关记录之类的操作?需要在同一地址找到每个人,无论他们是工作人员、成员还是支持者?这些事情是将地址规范化为单个表的令人信服的理由。

但是,您是否需要像邮局那样将地址视为一级实体?如果您需要它们不同,您可能希望有多个实体指向同一个地址。但在这种情况下,您谈论的是多对多关系,这增加了复杂性并且不一定是可取的,即使它是一个更准确的“现实世界”模型。如果您可以忍受一些由不同关系指向的重复地址,或者不期望重复,那么您可以节省这种复杂性。

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

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

于 2013-11-02T07:56:07.263 回答
0

You could separate them as Person/Role. You would have a table of roles (i.e. staff, member, supporter, etc.) and a table of people (name, address, street, city, etc)

This gives you full relational control over both people and roles, including a history of when a person was a supporter, became a member, and was hired on as staff - of sorts.

Consider this fiddle: http://sqlfiddle.com/#!2/3826c/5/0

((forgive the fiddle, it's my first share of sqlfiddle. Without knowing your DB, I chose MySQL))

于 2013-11-02T08:35:15.980 回答
0

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

  1. 主 ID -> 您为一个表定义一个唯一 ID。例如 1001 为员工,1002 为会员...等。
  2. 交易 ID -> 如果有任何记录插入了该 ID,则链接到此交易 ID。
于 2013-11-02T07:18:33.220 回答