是否可以在mysql中的字段中添加额外的列?

时间:2013-11-07 18:59:48

标签: mysql database-design database-schema

我们希望通过为每个“列”添加额外的列来扩展MySQL。现在你有以下内容。

Field, Type, Null, Key, Default, Extra

我们希望能够在“列”定义中添加一个额外的列,例如Attributes。我们的系统具有某些设计规范,我们需要每个“列”描述更多数据。我们如何在MySQL中实现这一目标?

返回所有列的查询如下:

SHOW COLUMNS FROM MyDB.MyTable;

编辑1

我应该首先添加这个,我为没有这样做而道歉。我们目前在每个列类型的“注释”部分描述属性,我们知道这是一个非常脏的解决方案,但它是我们当时唯一能想到的解决方案。我们已经构建了一个围绕数据库结构的代码生成器,这正是源于此计划的真正原因。我们想要描述列的代码属性,以便代码生成器可以获取更改并在每次更改或运行时刷新代码库。

1 个答案:

答案 0 :(得分:3)

首先,术语:“字段”和“列”在此上下文中基本上是同义词。字段和列之间没有区别。一些MySQL命令甚至允许您交替使用这两个单词(例如SHOW FIELDS FROM MyDB.MyTable)。

  

我们希望为表中的每列指定属性。为“field”添加“field_foo”将为每一行反复重复相同的数据。

简单回答: 如果您想要更多属于给定列foo的属性,那么您应该创建另一个表,其中foo是其主键,因此每个不同的值只能获得一行。这是database normalization过程的一部分。这允许您具有描述给定值foo而无需重复数据的属性,即使您在原始表中多次使用该值也是如此。


听起来您可能还需要允许可扩展性,并且您希望在将来允许新列,但您现在不知道哪些列或多少列。这是一个非常常见的项目要求。

您可能对我的演示文稿Extensible Data Modeling感兴趣,其中我概述了SQL中针对此类问题的不同解决方案。

  • 额外列
  • 实体 - 属性 - 值
  • 类表继承
  • 序列化LOB
  • 反向索引
  • 在线架构更改
  • 非关系型数据库

这些解决方案都不是万无一失的,每个都有自己的优点和缺点。因此,值得了解所有这些,然后确定哪些优势对您的特定项目有重要意义,而他们的弱点是不会给您带来太多不便(这是许多软件设计选择的决策过程)。 / p>


  

我们目前正在为每个列类型的部分描述属性

所以你使用的是“序列化LOB”解决方案。