数据库设计问题

时间:2013-04-20 08:07:29

标签: database

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

  1. 我已经将地址分解为单个实体,分解为最小的 单元。 Bur地址在几个表格中重复出现。就像地址字段一样 Client表以及Employee表。我们是否应该将地址分成仅包含链接字段的单独表格

    例如

  2. 使用以下属性创建ADDRESS表:

    • Entity_ID(可以是员工ID(家庭住址)或客户ID(办公室地址))
    • 单元
    • 建筑
    • 局部性
    • 国家
    • 国家
    • 邮政编码
  3. Employee表和Client表中删除所有地址字段

  4. 我们可以通过获取employee ID并在ADDRESS表中提取地址来获取地址

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

2 个答案:

答案 0 :(得分:3)

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

根据我的说法,您可以通过两种方式为此问题设计数据库。

一个。使用一个表

表名--- ADDRESS

列名

  1. 序列号(唯一ID或主键)
  2. 客户/员工ID
  3. 地址。
  4. B中。使用两个表

    表名--- CLIENT_ADDRESS

    列名

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

      列名

      1. 序列号(唯一ID或主键)
      2. 客户端ID(员工表的外键)
      3. 地址。
      4. 当然,您可以使用尽可能多的列而不是地址,就像您提到的单位,建筑,街道e.t.c

        根据我的经验,还有一个建议

        请在每张表中添加这五列。

        1. CREATED_BY(谁创建了此行意味着应用程序的用户)
        2. CREATED_ON(创建时间和日期表行)
        3. MODIFIED_ON(谁修改了此行意味着应用程序的用户)
        4. MODIFIED_BY(修改时间和日期表行)
        5. DELETE_FLAG(0 - 已删除且1 - 有效)
        6. 从大多数开发人员的角度来看,其原因是,您的客户可以随时要求任何时间段的记录。所以如果你在现实中删除那么对你来说这将是一个严重的情况。因此,每当应用程序用户从gui删除记录时,您必须将标志设置为0而不是实际删除它。默认值为1,表示该行仍处于活动状态。

          在检索时,你可以选择像这样的条件

          select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;
          

          注意:这是我的经验建议。我并没有强迫你采纳这个。所以请根据您的要求添加。

          没有任何重要目的的ALSO表不需要这样。

答案 1 :(得分:1)

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