亚肯定分开地址更好因为人们可以有多个地址,所以它会增加数据冗余。
根据我的说法,您可以通过两种方式为这个问题设计数据库。
A. 使用一张桌子
表名 --- ADDRESS
列名
- 序列号(唯一 ID 或主键)
- 客户/员工 ID
- 地址。
B. 使用两个表
表名 --- CLIENT_ADDRESS
列名
- 序列号(唯一 ID 或主键)
- 客户 ID(客户表的外键)
- 地址。
表名 --- EMPLOYEE_ADDRESS
列名
- 序列号(唯一 ID 或主键)
- 客户 ID(员工表的外键)
- 地址。
当然,您可以使用尽可能多的列而不是地址,例如您提到的 Unit、Building、Street 等
根据我的经验,还有一个建议
请在您的每个表格中添加这五列。
- CREATED_BY(创建此行的人表示应用程序的用户)
- CREATED_ON(创建表行的时间和日期)
- MODIFIED_ON(修改此行的人表示应用程序的用户)
- MODIFIED_BY(修改表行的时间和日期)
- DELETE_FLAG(0 -- 已删除和 1 -- 激活)
从大多数开发人员的角度来看,这样做的原因是,您的客户可以随时要求任何时间段的记录。因此,如果您在现实中删除,那么这对您来说将是一个严重的情况。因此,每当应用程序用户从 gui 中删除记录时,您必须将标志设置为 0 而不是实际删除它。默认值为 1,表示该行仍处于活动状态。
在检索时,您可以像这样选择 where 条件
select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;
注意:这是根据我的经验提出的建议。我一点也不强迫你采用这个。所以请根据您的要求添加它。
没有任何重要用途的表也不需要这个。