【问题标题】:Is there a smart way to link a field to another field? [closed]有没有一种聪明的方法可以将一个字段链接到另一个字段? [关闭]
【发布时间】:2011-12-16 18:15:55
【问题描述】:

示例:包含不同金属的名称和特性(密度、颜色、熔点等)的数据库,我可能已经从一个来源(网站、书籍、...)和熔化中找到了密度值从另一个指向,我想让它可以从任何给定值的来源检索。

简单的解决方案是为所有属性创建一个“密度”列和一个“密度源”列等等,但这似乎是解决这个问题的一种非常冗长的方法。是的,“密度源”可以是一个简单的整数,另一个表格说明了源。

从某种意义上说,我希望在字段中添加脚注之类的内容。

【问题讨论】:

  • 用 [MaterialID, Property, Value, Source] 创建一个表格并像 [mercury, 'meltingPoint', -39, "website here" 那样填充不是更容易吗?
  • 数据库设计没有“正确的方法”。您应该考虑您的用例、数据特征等。您希望哪些查询应该快速运行?有多少数据?
  • @jclozano - 虽然要小心,但这是一种 EAV(实体-属性-值)设计,它有一些有趣(通常令人沮丧)的缺点。不过,这可能是使用它的合适时间。虽然,如果通常有一组通用属性(密度、原子序数等)的通用数据源,那么至少应该将它们拉到自己的表中。
  • @X-Zero 完全同意,有它的缺点,但是当需要灵活性时它可以完成工作:)
  • @jclozano - 当我读到你的评论时,我刚刚有我的“Duh”时刻,当然这看起来是正确的做事方式。从某种意义上说,当我说我想链接两个字段时,答案是创建两个表并将它们链接起来。当我应该从输入端思考时,我仍然从输出端思考。

标签: sql footnotes


【解决方案1】:

艰难的答案是,您不会得到任何比拥有source 表更详细的内容,然后为每一位信息提供指向每个来源的链接。

您可以做的是为您的密度、颜色、熔点等创建可能的来源矩阵,然后为此分配一个通用的“SourceKey”,这样您只需在实际属性上存储一个来源桌子。然后,要获得密度源,您可以这样做:

select
    s.SourceName as DensitySource,
    m.*
from
    metals m
    inner join SourceMatrix sm on
        m.SourceKey = sm.SourceKey
    inner join Source s on
        sm.DensitySourceKey = s.SourceKey

不过,这完全取决于您可以拥有多少组合以及这是否有效。数据库存储关系,但不存储沿袭。

【讨论】:

  • 我认为您的回答基本上就是 jclozano 在上面对我的问题的评论中建议的内容(请参阅我对他的评论的评论)。
【解决方案2】:

如果要标记整个列,可以使用 SQL Server 的 extended propertiesMySQL COMMENT 选项。这些是数据库关系设计的“外部”

如果要按列和每行标记,请添加另一列,因为它要存储在模型中的相关数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2017-01-31
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多