4

我正在使用一个标准的 SQL 数据库,我试图弄清楚是否要展平表格或使其更加“面向对象”。对我来说,较小的表格更容易阅读,但它需要连接表格并具有一对一的关系。这通常是一种很好的做事方式,还是在 SQL 世界中不受欢迎?

我有一个具有以下属性的表:

MYTABLE
- ID
- NAME
- LABEL
- CREATED_TS
- MODIFIED_TS
- CREATED_USER
- MODIFIED_USER

对我来说,创建/修改的字段将是它们自己的对象。实际上还有更多字段,所以它不仅仅是这么小。我认为创建另一个名为“MYTABLE_MODINFO”的表或类似的表将具有 CREATED 和 MODIFIED 字段,并且在需要来自它们的数据时将它们连接起来。这些表不是高访问量表,它们每分钟不会有大量查询,甚至不会有数百行,所以我认为效率不会成为问题。

所以我主要想知道的是这会是一个普遍接受的设计,还是你应该保持你的表格结构平坦?

4

3 回答 3

2

您应该在同一个表中创建审计信息。原因是这些数据是行的一部分并且是一对一的关系,因此没有必要将其分开。

如果您想存储审计信息(审计跟踪/历史),那么您可以创建另一个表,但是在大多数情况下,我看到这是通过“复制”数据并创建代理键和映射回原始行来构建的。我在引号中列出重复的原因是因为审计本质上需要复制旧数据......如果它在写入后被链接并且可以更改,那么它并不是真正的审计。

只是我的两分钱。如果它没有意义,那么我可以提供一些例子。但是,要点是每一行只会有一个当前的修改信息,那么如果它永远不会超过一个,为什么要打破它呢?

于 2012-07-02T16:34:35.240 回答
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

除此之外,您应该规范化数据库以确保一切都处于最佳状态。请记住,最重要的是获取您需要的内容并进行调整。

http://databases.about.com/od/specificproducts/a/normalization.htm

http://www.youtube.com/watch?v=xzeuBwHkKxw

于 2012-07-02T16:34:14.863 回答
1

在我看来,RDBMS 设计与面向对象的方法不同。您提到的示例不是不同的对象域,而是记录的数据继承。由于不会有任何大量查询/执行表的开销,因此您应该将它们保存在同一个表中以进行审计,并且在规范化数据时也更容易使用。

于 2012-07-02T16:41:40.290 回答