2013-04-20 166 views
1

我有两个关于项目的问题。如果我得到澄清,将不胜感激。数据库设计问题

  1. 我已经打破到最小 单元分解地址转换成单独的实体。 Bur地址在几张表中重复。 Like地址字段有 Client表以及Employee表。如果我们只是一个链接字段中的地址分离成单独的表

    对于实例

  2. 具有以下属性创建ADDRESS表:

    • ENTITY_ID(这可能是一个员工ID (家庭住址)或客户端ID(办公地址))
    • 单位
    • 大厦
    • 局部性
    • 国家
    • 国家
    • 邮编
  3. 取下Employee表和Client表中的所有地址字段

我们可以通过获取employee ID并参照ADDRESS表获得地址

哪种方法更好?在所有表中具有地址字段或分开,如上所示。任何关于哪个设计更好的想法?

+1

看看这个:http://stackoverflow.com/questions/6576442/should-user-and-address-be-in-separate-tables – passion 2013-04-20 08:18:23

回答

1

将地址分隔成单独的表是一个更好的设计决策,因为它意味着任何db端验证逻辑等只需要在一个地方维护。

3

雅绝对分离地址更好因为人们可以有多个地址,所以它会增加数据冗余。

您可以根据我以两种方式为这个问题设计数据库。

A.使用一个表

表名--- ADDRESS

列名称

  1. 序列号(唯一ID或主键)
  2. 客户端/员工ID
  3. 地址。

B.使用两个表

表的名字--- CLIENT_ADDRESS

列名

  1. 序列号(唯一的ID或主键)
  2. 客户端ID(外键的客户表)
  3. 地址。

表名--- EMPLOYEE_ADDRESS

列名称

  1. 序列号(唯一ID或主键)
  2. 客户端ID(外键雇员表)
  3. 地址。

当然,你可以使用尽可能多的列数,而不是地址就像你所提到的单位,建筑物,街道等

也有是从我的经验,一个建议

请在您的每个表格中添加这五列。

  1. CREATED_BY(谁创造了此行意味着应用程序的用户)
  2. CREATED_ON(在创建什么时间和日期表行)
  3. MODIFIED_ON(谁修改了该行指的一个用户应用程序)
  4. MODIFIED_BY(在什么时间和日期表行修改)
  5. DELETE_FLAG(0 - 删除,1 - 主动)

ŧ他从大多数开发人员的角度来看这个原因是,你的客户可以随时请求任何时间段的记录。所以,如果你在现实中删除,那么对你来说这将是一个严重的情况。因此,每当应用程序用户从gui删除记录时,您必须将该标志设置为0,而不是实际删除它。默认值是1,这意味着该行仍处于活动状态。这是从我的经验建议:

在检索的时候,你可以在那里像这样

select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1; 

注意条件进行选择。我根本没有强制你采纳这一点。所以请根据您的要求添加它。

另外,没有任何重要目的的表不需要这个。