Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库设计问题_Database - Fatal编程技术网

Database 数据库设计问题

Database 数据库设计问题,database,Database,关于一个项目,我有两个问题。如果我能得到澄清,我将不胜感激 我已将地址分解为单个实体,并将其分解为最小的实体 单位。Bur地址在几个表中重复。类似的地址字段在 客户表以及员工表。我们是否应该将地址分隔成一个单独的表,其中只包含一个链接字段 例如 创建具有以下属性的地址表: 实体ID(可以是员工ID(家庭地址)或客户ID(办公室地址)) 单位 建筑 街头 地点 城市 陈述 国家 Zipcode 从Employee表和Client表中删除所有地址字段 我们可以通过获取员工ID并参考地址表获取地址

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

  • 我已将地址分解为单个实体,并将其分解为最小的实体 单位。Bur地址在几个表中重复。类似的地址字段在
    客户
    表以及
    员工
    表。我们是否应该将地址分隔成一个单独的表,其中只包含一个链接字段

    例如

  • 创建具有以下属性的
    地址
    表:

    • 实体ID(可以是员工ID(家庭地址)或客户ID(办公室地址))
    • 单位
    • 建筑
    • 街头
    • 地点
    • 城市
    • 陈述
    • 国家
    • Zipcode
  • Employee
    表和
    Client
    表中删除所有地址字段

  • 我们可以通过获取
    员工
    ID并参考
    地址
    表获取地址


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

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

    将地址分离到一个单独的表中是一个更好的设计决策,因为它意味着任何db端验证逻辑等都只需要维护保持在一个位置。

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

    根据我的说法,您可以用两种方法来设计这个问题的数据库

    A.使用一张桌子

    表名--地址

    列名

  • 序列号(唯一id或主键)
  • 客户/员工ID
  • 地址
  • B.使用两个表格

    表名--客户地址

    列名

  • 序列号(唯一id或主键)
  • 客户端ID(客户端表的外键)
  • 地址
  • 表名--员工地址

    列名

  • 序列号(唯一id或主键)
  • 客户ID(员工表的外键)
  • 地址
  • 当然,您可以使用尽可能多的列,而不是您提到的单元、建筑、街道e.t.c的地址

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

    请在每个表中添加这五列

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

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

    select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;
    
    注意:这是根据我的经验提出的建议。我一点也不强迫你接受这个。因此,请根据您的要求添加它


    另外,没有任何重要用途的表也不需要这样做。

    分离地址肯定更好,因为人们可以有多个地址,所以这将增加数据冗余

    根据我的说法,你可以用两种方法来设计这个问题的数据库

    A.使用一张桌子

    表名--地址

    列名

  • 序列号(唯一id或主键)
  • 客户/员工ID
  • 地址
  • B.使用两个表格

    表名--客户地址

    列名

  • 序列号(唯一id或主键)
  • 客户端ID(客户端表的外键)
  • 地址
  • 表名--员工地址

    列名

  • 序列号(唯一id或主键)
  • 客户ID(员工表的外键)
  • 地址
  • 当然,您可以使用尽可能多的列,而不是您提到的单元、建筑、街道e.t.c的地址

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

    请在每个表中添加这五列

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

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

    select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;
    
    注意:这是根据我的经验提出的建议。我一点也不强迫你接受这个。因此,请根据您的要求添加它


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

    检查一下:这是否回答了您的问题?看看这个:这能回答你的问题吗?