Таблица базы данных с тысячами столбцов - PullRequest
0 голосов
/ 11 октября 2018

Я пишу простое приложение Django, которое отображает значения из таблицы.Таблица очень проста, нет связи с другими таблицами, все значения являются целыми числами:

patientID    region1 region2 regionN region200000
patient1          30      23       9           14
patient2           1      12       9           22
patientN          23      21      12            8

единственная проблема в том, что у меня ~ 200 000 геномных областей - это фиксированное число (только числоколичество пациентов растет).

Какая система БД лучше всего подходит для такой таблицы?Данные являются суперструктурированными, простыми и однородными - идеально подходят для SQL, но количество предположений должно быть noSQL?

Было бы лучше иметь 1 таблицу с 200000 столбцами, чем N таблиц (N пациентов) с200000 строк.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Этот дизайн не"идеально подходит для SQL", поскольку он нарушает основные правила нормализации базы данных.И ни одна реляционная база данных не поддерживает 200000 столбцов для одной таблицы (большинство из них имеют ограничение в пределах 1500-2000 столбцов)

Даже если число областей «фиксировано», в реляционной базе данных не должно бытьодин столбец для каждой «фиксированной» вещи.

Это классическое отношение «многие ко многим», которое обычно моделируется тремя таблицами.

Одна для пациентов и одна для регионов:

create table patient 
( 
   id integer primary key, 
   ... other columns
);

create table region
(
   id integer primary key, 
   ... other columns
);

Тогда вынужна таблица сопоставления между пациентами и регионами:

create table person_region_map
(
   person_id integer not null references person,
   region_id integer not null references region,
   primary key (person_id, region_id)
);

Карта гарантирует, что каждая комбинация региона и человека встречается только один раз из-за первичного ключа в обоих столбцах.


Другой вариант - использовать функциональность JSON в реляционной базе данных, что довольно распространено в наши дни.Используется ли он для вас, во многом зависит от того, какой продукт СУБД вы используете.

В PostgreSQL вы можете думать о чем-то вроде этого:

create table patient 
( 
   id integer primary key, 
   regions jsonb,
   ... other columns
);

Затем вы вставляете значение JSON, которое содержит карту ключ / значение для регионов.Это дает дополнительное преимущество, заключающееся в том, что если регион не назначен региону, он не занимает места:

insert into patient (id, regions)
values (42, '{"region1": 30, "region10": 9}');

С Postgres это можно довольно эффективно индексировать и запрашивать.

0 голосов
/ 11 октября 2018

Я бы предложил использовать отношение многие ко многим

enter image description here

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