繁体   English   中英

在哪里/如何在数据库中存储有关(SQLite3)数据库的应用程序定义的属性?

[英]Where/how to store application defined properties about a (SQLite3) database in the database?

因此,我有一个或多个具有各种数据表的数据库。

我需要存储一些数据库特定的属性。 例如,已删除网站的国家/地区(该网站有多个国家/地区)。

最好的方法是什么? 我认为最好将属性保留在数据库中,但是(SQLite3)是拥有另一个表的唯一方法吗? (ID,键,值)但是值可能需要为字符串/文本,整数,浮点数/实数。 为了解决这个问题,我只是将它们全部转换为带有json.dumps / loads之类的字符串,或者这是更好的方法吗?

谢谢

因此,听起来好像您希望拥有一个类似于数据库的字典,您可以在其中存储有关应用程序如何与数据库交互的键值信息。 有很多方法可以解决这个问题。 我建议选择最适合您的应用程序的一种。

首先,假设您知道将要使用的键,一种简单的方法是创建一个表,该表最多包含一行:

create table properties( country_of_website varchar(2) not null, time_downloaded timestamp not null);

我没有包含id列。 根据您的ORM模型,您可能需要一个。 您将需要确保该表永远不会超过一行。 这种方法很好,因为您依赖数据库的类型。 如前所述,sqlite使用动态类型,但是有一天您可能会使用另一个数据库。 如果您拥有少量属性,并且提前知道它们的属性,则此方法效果很好。

在频谱的另一端,您可以执行以下操作

create table properties(key varchar(20) primary key, value varchar(256));

那里有一个包含键和值的字符串表示形式的表。 优点是它是动态的。 缺点是您将使用属性的字符串表示形式。 尽管对于sqlite来说,这并不是一个很大的缺点,但是对于其他数据库,您可能会失去使用强类型检测程序错误的优势。

第三种方法是每种类型都有一个表。

create table float_properties(key varchar(20) primary key, value float not null);

还要创建一个string_properties表等。由于动态类型,我建议使用sqlite反对这种方法。 第三种方法是最复杂的,只有在需要强类型输入并且无法使用第一种方法时才使用它。

SQLite使用动态类型 ,因此您可以直接将属性值存储在列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM