【问题标题】:SQL: One table, different names for columns?SQL:一张表,不同的列名?
【发布时间】:2012-09-05 17:41:07
【问题描述】:

我有许多非常相似的数据类型,除了少数列在逻辑上具有不同的名称(但相同的数据类型)。我想将所有内容都存储在一张表中。

现在我的想法只是为某些列(例如“custom_data_1”等)提供一个通用名称,并在不同的表中记住每种数据类型的列名是什么。这应该可行,但我想知道是否有更结构化的方式(这将使查询更容易并且感觉不那么脏)来实现相同的效果(在 MySQL 或 SQLite 中)。

【问题讨论】:

  • 您的逻辑数据库模型应该依赖于概念模型(由业务逻辑定义)+技术辅助实体。好像您要构建一些可怕的东西并使您的业务逻辑依赖于数据库模型。那不是一条路。另外,请阅读有关数据库规范化的信息。

标签: mysql sql sqlite


【解决方案1】:

如果要存储不同的东西,则应将它们存储在不同的表中。然后,您可以稍后创建一个视图以获取易于查询的内容。

优点是每个表都有自己的对象,您可以轻松地向其中添加/删除/重命名列。如果您的 type1 需要 2 个额外的列,但 type2 实际上丢失了一列怎么办?

【讨论】:

    【解决方案2】:

    如果有需要 SQL VIEW 的案例,我认为没有比这更好的案例了。假设您的 SQL 后端支持它们(并且我相信所有这些都值得)去。

    【讨论】:

      【解决方案3】:

      最佳实践建议使用规范化表结构来编写易于阅读/使用的 sql The Three Normal Forms - MySQL

      确保您的列名称描述了它们的用途,例如,userid 不得称为custom_data_1。如果您创建一个新表并且需要引用用户 ID,它应该很容易链接为外键。

      您可以将所有内容存储在一个表中,但是结构查询语言可以做到这一点 - 将来自不同表(已优化和正确创建)的数据合并到一个视图中。需要考虑的重要一点是数据增长时的可扩展性和可维护性。

      考虑 MySQL 最佳实践 - Top 20+ MySQL Best Practices

      也是一个有趣的阅读 - Splitting Tables in MySQL. Good practice?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2015-01-02
        • 1970-01-01
        相关资源
        最近更新 更多