具有多值属性的SQLite数据库

时间:2018-07-01 04:38:17

标签: sql sqlite

我想创建一个用于存储对象的SQLITE数据库。这些对象具有多个值的属性,为此我创建了单独的表。

CREATE TABLE objs 
(
     id INTEGER, 
     name TEXT
);

CREATE TABLE prop1 
(
     id INTEGER, 
     value TEXT, 
     FOREIGN KEY(id) REFERENCES objs(id)
);

CREATE TABLE prop2 
( 
     id INTEGER, 
     value TEXT, 
     FOREIGN KEY(id) REFERENCES objs(id)
);

对于由于JOIN而得到的 id 的列表,我想查找这两个属性的值。为此,我正在执行JOIN,然后执行另一个带有'prop1'表的JOIN。然后,我对“ prop2”表重复此操作。我怀疑这是低效的(联接太多)并且可以改进。我有两个问题。

  1. 这是设计数据库的正确方法吗?
  2. 提取我想要的属性值的最有效方法是什么?

1 个答案:

答案 0 :(得分:2)

我建议采用以下结构。

CREATE TABLE objs 
(
     id INTEGER, 
     name TEXT
);

CREATE TABLE properties
(
     id INTEGER,
     Property_name varchar(50),
     Property_type varchar(10),
     value TEXT, 
     FOREIGN KEY(id) REFERENCES objs(id)
);

在不同的表中存储所有不同类型的属性是一个非常糟糕的主意。您可以只存储属性名称和类型(字符串,数字等)。您还可以添加多个值列,例如numeric_value,string_value等。