Database 最佳实践:数据库引用表

Database 最佳实践:数据库引用表,database,database-design,relational-database,rdms,Database,Database Design,Relational Database,Rdms,在数据库设计中,对于小块数据,元组和引用表的感觉是什么 例如,假设您正在设计一个涉及办公室管理的模式。您希望记录每个员工所属的部门,但对与部门相关的任何信息不感兴趣。所以,在EMPLOYEE表中,是将department作为字符串/char/varchar/etc,还是将其作为外键,与department表关联 如果DEPARTMENT表只记录部门名称,则通常需要将其与EMPLOYEE表合并。但是,如果这包含在EMPLOYEE表中,您无法保证某些用户会将HR称为“HumanResources”,

在数据库设计中,对于小块数据,元组和引用表的感觉是什么

例如,假设您正在设计一个涉及办公室管理的模式。您希望记录每个员工所属的部门,但对与部门相关的任何信息不感兴趣。所以,在EMPLOYEE表中,是将department作为字符串/char/varchar/etc,还是将其作为外键,与department表关联

如果DEPARTMENT表只记录部门名称,则通常需要将其与EMPLOYEE表合并。但是,如果这包含在EMPLOYEE表中,您无法保证某些用户会将HR称为“HumanResources”,有些用户可能会将其称为“H-R”,有些用户可能会将其称为“HumanResources”,等等。将其作为外键保证它只能是一件事。此外,如果要添加有关部门的其他信息,那么如果将其放在自己的表中就很容易了


那么人们怎么看呢?当然,更多的表和引用也可能对性能产生负面影响。我的问题是专门针对Oracle 11g提出的,但我怀疑所涉及的RDM类型与此设计考虑因素有多大关系。

如果您处理的是真正的海量数据集,您只需担心这类事情对性能的影响。对于任何像这样的常规办公环境系统,最好使用规范化模式。

如果您处理的是真正的海量数据集,您只需要担心这类事情对性能的影响。对于任何这样的常规办公环境系统,最好使用规范化模式。

如果使用相关表,则不会出现更新1000000条记录的性能问题,因为人事部门变成了人力资源部门

你还有另一个选择。创建该表并将其用作数据输入的查找。但是将信息存储在主表中

但是,我更喜欢为部门使用相关表,并将部门和员工的ID存储在具有ID、开始和结束的联接表中。随着时间的推移,员工往往会从一个部门转移到另一个部门。能够告诉他们什么时候在哪个部门,这对报告很有帮助。在设计这类事情时,需要考虑数据如何随着时间的推移和报告的使用。短视的设计以后很难修正


你对桌子太多的担心是毫无根据的。数据库被设计为具有许多表并使用联接。如果索引正确,大多数数据库将不会有性能影响。你们知道吗,我知道Realational数据库有很多表,这些表有TB的数据,性能很好

如果使用相关表,则不会出现更新1000000条记录的性能问题,因为人事部门变成了人力资源部门

你还有另一个选择。创建该表并将其用作数据输入的查找。但是将信息存储在主表中

但是,我更喜欢为部门使用相关表,并将部门和员工的ID存储在具有ID、开始和结束的联接表中。随着时间的推移,员工往往会从一个部门转移到另一个部门。能够告诉他们什么时候在哪个部门,这对报告很有帮助。在设计这类事情时,需要考虑数据如何随着时间的推移和报告的使用。短视的设计以后很难修正


你对桌子太多的担心是毫无根据的。数据库被设计为具有许多表并使用联接。如果索引正确,大多数数据库将不会有性能影响。你们知道吗,我知道Realational数据库有很多表,这些表有TB的数据,性能很好

我想你回答了你自己的问题:“如果这包含在EMPLOYEE表中,你不能保证一些用户会将HR称为‘HumanResources’、一些用户可能会将其称为‘H-R’、一些用户可能会将其称为‘HumanResources’,等等”……你是否已经确定此时确实需要担心绩效?我想你回答了你自己的问题:“如果这包含在EMPLOYEE表中,您无法保证某些用户会将HR称为‘HumanResources’、某些用户可能会将其称为‘H-R’、某些用户可能会将其称为‘HumanResources’,等等“…你有没有弄清楚,你现在真的需要担心性能问题?FWIW,前几天我在我的台式计算机上测试了级联更新。它在不到3秒钟的时间内将更新级联到5000万行的表中的300万行。(PostgreSQL 9.1.这台计算机并没有什么特别快或特别的。)我想多年来我都不担心层叠更新的速度。所以我同意“更多的桌子”,但并不总是同意“使用身份证号码”+1有鉴于此,前几天我在台式计算机上测试了级联更新。它在不到3秒钟的时间内将更新级联到5000万行的表中的300万行。(PostgreSQL 9.1.这台计算机并没有什么特别快或特别的。)我想多年来我都不担心层叠更新的速度。所以我同意“更多的桌子”,但并不总是同意“使用身份证号码”+1.