【问题标题】:Database : Store value that can be either numeric or alphanumeric数据库:存储可以是数字或字母数字的值
【发布时间】:2017-09-20 20:52:12
【问题描述】:

我正在尝试决定如何在我的数据库中存储一些数据。 (SQLite) 假设我们有 2 个表:属性和类型

表格类型或多或少像一个枚举,它存储了我的模型中存在的所有类型(例如整数、实数、字母数字)

Table Attribute 包含属性,一条记录长这样:

Attribute :
id : its id
name : name of the attribute
value : ??? (the main question here)
type : foreign key to table type

所以属性可以是整数、实数或字母数字类型。我不确定如何根据类型继续存储属性的值。

到目前为止,我已经考虑了 3 个解决方案:

解决方案1:属性的“值”字段是字符串类型,我以编程方式转换为相关类型

解决方案 2:我创建更多“值”字段,例如:intValue、realValue 和 alphanValue,并根据类型将 NULL 放在不相关的字段中

解决方案 3:我再创建 3 个表,IntValue、RealValue 和 AlphaNValue,并带有相关属性的外键。

我想知道哪种解决方案在性能和一致性方面更好,或者是否还有其他我没有想到的相关解决方案。

非常感谢

【问题讨论】:

    标签: sql database sqlite sqldatatypes


    【解决方案1】:

    你的问题被标记为 MySQL,但你说它是关于 SQLLite - 请正确标记,它可以帮助其他人!

    听起来您正在实施类似Entity-Attribute-Value 的解决方案。关于这个概念有很多讨论 - this 是最有用的讨论之一。

    对 EAV 提出的常见批评之一正是您要问的问题 - 以适当的数据类型存储数据很困难。

    因此,如果您正在这样做,请查看 EAV 的替代方案 - 通常,“灵活性”会带来很多缺点,不值得。尤其是在 SQLLite 等受限环境中。

    如果这不现实,我会选择选项 1。在您绘制的所有选项中,您的应用程序必须在数据库之外做一些工作,选项 1 是最简单的。简单几乎总是更好!

    【讨论】:

    • 嗨内维尔。是的,考虑到您的回答和 w01f,似乎解决方案 1 对我来说是可行的方法;我现在要看看你的链接,非常感谢你的时间
    【解决方案2】:

    我会说:保持简单。 SQLite 连接表并不快,也不是完整的 DBMS。所以一般来说最好少用几张桌子。

    如果有理由让它不那么简单,我看不到原因。或许可以解释一下为什么在你的情况下你会采取更复杂的方式。

    【讨论】:

    • 我想知道在这种情况下通常的做法是什么。你说得对,SQlite 并不是最擅长加入表格的。考虑到这一点,我可能会选择解决方案 1 或 2。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2018-07-29
    • 2015-10-15
    • 2015-04-09
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多