我正在使用一个标准的SQL数据库,我正在试图弄清楚是否要压平一个表或使其更“面向对象”。对我来说,较小的表更容易阅读,但它需要连接表并具有一对一的关系。这通常是一种很好的做事方式,还是在SQL世界中不受欢迎?
我有一个具有以下属性的表:
MYTABLE
- ID
- NAME
- LABEL
- CREATED_TS
- MODIFIED_TS
- CREATED_USER
- MODIFIED_USER
对我来说,创建/修改的字段将是它们自己的对象。实际上还有一些领域,所以它不仅仅是这么小。我认为创建另一个名为“MYTABLE_MODINFO”的表或类似具有CREATED和MODIFIED字段的表,并且当需要来自它们的数据时它们将被连接。这些表不是高访问表,它们每分钟不会有大量查询,甚至不会有数百行,所以我认为效率不会是一个大问题。
所以主要是我想知道这是一个普遍接受的设计还是你应该保持你的桌子结构平整?
答案 0 :(得分:2)
您应该在同一个表中创建审核信息。原因是这些数据是行的一部分,并且是一对一的关系,因此将它分开是没有意义的。
如果您想存储审核信息(审核跟踪/历史记录),那么您可以创建另一个表,但是在大多数情况下,我已经看到这个由#34;复制"数据和创建代理键并映射回原始行。我在引号中列出重复的原因是因为审计固有地要求重复旧数据...如果它在写入后链接和可更改,那么它实际上不是审计。
只是我的两分钱。如果它没有意义,那么我可以提供一些例子。但是,要点是每一行只会有一条当前的修改信息,所以如果它永远不会超过一条,为什么要把它分解呢?
答案 1 :(得分:1)
避免数据库“一对一”,您将失去性能,可扩展性,独立性。你能想象如果你想为每个ID存储2张图片会发生什么吗?你会创建另一个字段,还是会重复这一行?...当你想升级时,创建关系更容易获得更多自由,请查看本教程。
http://www.youtube.com/watch?v=Onzm-PxSjtE
http://folkworm.ceri.memphis.edu/ew/SCHEMA_DOC/comparison/erd.htm
http://www.visual-paradigm.com/product/vpuml/provides/dbmodeling.jsp
除此之外,您应该对DB进行规范化,以确保所有内容都处于最佳状态。请记住,最重要的是采取你需要的东西并进行调整。
http://databases.about.com/od/specificproducts/a/normalization.htm
答案 2 :(得分:1)
在我看来,RDBMS设计与面向对象的方法不同。您提到的示例不是不同的对象域,而是记录的数据继承。由于不会有大量查询/执行表的开销,因此您应将它们保存在同一个表中以用于审计目的,并且更容易使用规范化数据。