База данных SQLite с многозначными свойствами - PullRequest
0 голосов
/ 01 июля 2018

Я хочу создать базу данных 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)
);

Для списка id s, который я получаю в результате JOIN, я хочу найти значения этих двух свойств. Для этого я выполняю СОЕДИНЕНИЯ, за которыми следует еще одно СОЕДИНЕНИЕ с таблицей prop1. Затем я повторяю это для таблицы prop2. Я подозреваю, что это неэффективно (слишком много объединений) и может быть улучшено. У меня два вопроса.

  1. Это правильный способ проектирования БД?
  2. Какой самый эффективный способ извлечь значения свойств, которые я хочу?

1 Ответ

0 голосов
/ 01 июля 2018

Я бы предложил следующую структуру.

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 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...