2017-04-24 22 views
0

我正在尝试确定如何在数据库中存储一些数据。 (SQLite的) 比方说,我们有2个表:属性和类型数据库:可以是数字或字母数字的存储值

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

表所有类型属性包含属性,记录如下所示:

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

因此属性的类型可以是Integer,Real或者字母数字。我不知道如何继续根据类型存储属性的值。

我认为到目前为止,3个解决方案:

解决方案1:属性的“值”字段是String类型的,我在有关类型转换programmaticaly

解决方案2:我创造更多的“值“字段,如:intValue,realValue和alphanValue,并根据类型将NULL置于不相关的字段中

解决方案3:我创建了3个表,IntValue,RealValue和AlphaNValue,其中包含相关Attribute的外键。

我想知道哪种解决方案在性能和一致性方面更好,或者如果还有其他相关解决方案我没有考虑过。

非常感谢

回答

0

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

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

在EAV上提出的一个常见批评就是您提出的问题 - 将数据存储在适当的数据类型中很难。因此,如果这就是你所做的,请看看EAV的替代品 - 通常,“灵活性”带来了如此多的缺点,这是不值得的。尤其是在像SQLLite这样的受限环境中。

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

+0

嗨内维尔。是的,考虑到你的答案和w01f,似乎解决方案1是我的选择。我现在要看看你的链接,非常感谢你的时间 – SivaDashq

0

我会说:保持简单。 SQLite加入表的速度并不快,也不是完整的DBMS。所以最好用更少的表格来进行。

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

+0

我想知道在这种情况下通常采用什么方式。您指出SQlite并不是加入表格的最佳选择。考虑到这一点,我可能会去解决方案1或2. – SivaDashq

相关问题