【问题标题】:Ensuring referential integrity between Columns in a Table确保表中列之间的引用完整性
【发布时间】:2011-06-16 16:11:23
【问题描述】:

目前我有一个表格模型,格式如下:

标准(criteria_id、criteria_name)

criteria_data(criteria_id, value)

我打算将与日期相关的信息存储到表中,因为一个标准(日期标准)可能只包含标准数据表中的单个日期,而其他标准数据可能是该日期的股票价格单独的行。 (另一个复杂之处在于:股票的名称也是一个标准)

我的问题:

我如何确保只有 1 个价格(单行标准)可以输入特定日期和股票名称的表格(另外 2 个单独的标准和行)。

我真的不想在 App 层强制执行此操作,所以我主要寻找 DB 层解决方案(如果有)。

如果有人建议我更合适的数据模型,我也愿意被告知废弃我的整个表格模型。

编辑 在得知我的愚蠢行为后(请参阅下面的 dPortas 帖子),我接受这不是明智的选择。我想到了一个新模型:

criteria_data(stockName,price, high,low,price,change)

虽然看起来是这样,但我认为实际的列名将是包含 criteria_id 的标识符。例如,stockname 字段可以是 col_1,high 可以是 col_3,但这将确保我可以在各个列上强制执行完整性。

人们对此有何看法?

【问题讨论】:

    标签: database referential-integrity


    【解决方案1】:

    您的桌子设计看起来很像EAV 的箱子。该反模式的缺点之一是您无法准确地存储正确的数据类型或对其应用约束。我建议你重新考虑设计。

    建议重新设计:criteria (criteria_id, criteria_name, date, stock_name, price) key: (stock_name, date)

    【讨论】:

    • 那个愚蠢的 EAV 事情正是我想要实现的,但你的设计可能不适合我正是因为我正在寻找一种有效的方式来引用不同的领域,例如高价、低价和当前价格使用单独的字段。我编辑了我的帖子以反映您的精彩观察
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多