代码之家  ›  专栏  ›  技术社区  ›  bobasaurus

新的SQL问题:是否有一个“外键”等价于引用列,或者将列名存储为另一个表中的字符串合乎逻辑?

  •  1
  • bobasaurus  · 技术社区  · 16 年前

    免责声明:我是一个SQL新手,只是发现了在应用程序中嵌入sqlite的巨大可能性。

    我正在为一个主要处理绘图数据存储的应用程序设计一个小型数据库。假设我有几个仪器数据表(每种类型的仪器一个),每个数据字段都有一列,如压力、温度、湿度等。我想加入这些数据表,拔出列名,并指定一个更为人可读的列“描述”,供用户选择独立/相关变量。用于绘图的标题。在sqlite中获取列名称非常简单,但我不确定是否应该将结果名称(以及更长的描述)存储为数据库中的另一个表或应用程序中某种类型的列表。如果它是数据库中的另一个表,我想我必须将列名存储为字符串…除非有某种方法可以引用SQL中的列?我不确定是否有一个与列等效的外键,或者这只是一个不良的数据库设计需要重新构造的迹象。

    感谢您的建议,堆栈溢出器。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Alison R.    16 年前

    有一些方法可以在SQL中进行自省,并提取表名和列名,但您可能不想这样做,而且这些方法的实现细节高度依赖于特定的RDBMS。

    因为人类可读的列名是 显示 细节,可能是一个静态值,请将其保存在数据库之外以及应用程序的显示/呈现部分的某个位置。(这也有例外,例如,如果您希望每个用户都可以自定义列名。)您可以保留一个哈希或字典,它定义了一个人性友好的名称,并使用实际的数据库列名作为其键。此设置可以方便地保存列显示的其他设置,如数据类型、要显示的精度(如果是数字)等。

        2
  •  1
  •   Jonathan Leffler    16 年前

    你所追求的有时被称为“数据字典”。如果DBMS不提供注释工具,那么您将需要模拟它们,这可能包括创建一个表,其中包含表名和列名。这样做是完全合理的。

    请注意跟踪表名和添加或删除列的更改的困难;内置设施只跟踪系统目录中的数据(DBMS需要跟踪发生的情况的“数据字典”信息),不会跟踪表中的内容。