1

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

  1. 我通过分解为最小单位将地址分解为单个实体。Bur 地址在几个表中重复。像地址字段一样存在于 Client表中以及Employee表中。我们是否应该将地址分隔到一个单独的表中,其中只有一个链接字段

    例如

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

    • Entity_ID(可以是员工 ID(家庭地址)或客户 ID(办公室地址))
    • 单元
    • 建造
    • 街道
    • 地方性
    • 城市
    • 状态
    • 国家
    • 邮政编码
  3. Employee表格和Client表格中删除所有地址字段

我们可以通过获取employeeID并参考ADDRESS地址表来获取地址

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

4

2 回答 2

3

亚肯定分开地址更好因为人们可以有多个地址,所以它会增加数据冗余。

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

A. 使用一张桌子

表名 --- ADDRESS

列名

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

B. 使用两个表

表名 --- CLIENT_ADDRESS

列名

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

表名 --- EMPLOYEE_ADDRESS

列名

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

当然,您可以使用尽可能多的列而不是地址,例如您提到的 Unit、Building、Street 等

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

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

  1. CREATED_BY(创建此行的人表示应用程序的用户)
  2. CREATED_ON(创建表行的时间和日期)
  3. MODIFIED_ON(修改此行的人表示应用程序的用户)
  4. MODIFIED_BY(修改表行的时间和日期)
  5. DELETE_FLAG(0 -- 已删除和 1 -- 激活)

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

在检索时,您可以像这样选择 where 条件

select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;

注意:这是根据我的经验提出的建议。我一点也不强迫你采用这个。所以请根据您的要求添加它。

没有任何重要用途的表也不需要这个。

于 2013-04-20T08:15:57.310 回答
1

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

于 2013-04-20T08:10:36.513 回答