Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
Нужно создать таблицу для хранения почти 300 чисел. Все числа одного типа float.
Мне кажется что должен быть способ попроще, чем создавать для каждого значения строку в таблице.
Подскажите, пожалуйста, так это или нет?
28 авг 15, 21:37    [18083837]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
o-o
Guest
Felagund,
ну так id_attr, value
и отдельно таблица атрибутов id_attr, attr_name
28 авг 15, 21:42    [18083849]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
o-o
Guest
в смысле, у вас же так и задумано (мне показалось сперва, что 300 колонок хотите)
проще нЕкуда.
ид сущности только еще надо в первую таблицу + таблицу сущностей, аналогичную таблице атрибутов
28 авг 15, 21:46    [18083857]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Felagund
Мне кажется что должен быть способ попроще, чем создавать для каждого значения строку в таблице.
Проще создавать для каждого значения строку в таблице.
28 авг 15, 21:56    [18083890]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
alexeyvg, я может некорректно выразился. 300 значений это только одна запись в таблице.
28 авг 15, 23:16    [18084149]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
o-o, да, именно 300 колонок и нужно.
28 авг 15, 23:18    [18084161]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
o-o
Guest
Felagund,
Ну вот, 300 колонок плохо, лучше развернуть вертикально в 3 таблицы (см. выше)
Но можно и заморочно сделать, если это ситуация, когда не всем сущностям все 300 атрибутов нужны:
sparse columns by Randal
28 авг 15, 23:33    [18084225]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Можно использовать sparse column

Felagund
o-o, да, именно 300 колонок и нужно.


use tempdb;
go

create table dbo.t(id int identity(1, 1) primary key)
go

alter table dbo.t add all_cols xml column_set for all_sparse_columns;
go

declare
	@cmd varchar(max) = N'';

select top(300) 
	@cmd += N'alter table [dbo].[t] add ' + 
			quotename(N'c' + replace(str(row_number() over(order by (select 0)), 3), ' ', 0))
			+ N' float sparse null;'
from 
	master..spt_values;

exec(@cmd);
go

insert into dbo.t(c101, c205, c300)
values(1, 2, 3);
go

select id, c101, c205, c300, all_cols from dbo.t;
go
28 авг 15, 23:41    [18084255]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o,

опередил
28 авг 15, 23:42    [18084257]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
А откуда данные будут сыпаться? Не предполагается ли у вас, что несколько потоков будут обновлять значения разных колонок одной строки? Тогда уж лучше, как выше описано, по строкам или эти 300 колонок разбить на M балиц c 300 / M колонок (M - количество потоков).
28 авг 15, 23:50    [18084294]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
И если эти 300 значений на строку будучи вставленными с NULL будут в последствии почти гарантированно обновляться на какое-то значение, то лучше их nullable не делать и sparse не использовать (forwarded rows для heap и page splits для clustered). И использовать какие-то варианты что предложены выше - по строкам.
29 авг 15, 00:03    [18084333]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Felagund,

Ну можно и в XML затолкать.
29 авг 15, 00:19    [18084402]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35390
Блог
EAV
29 авг 15, 00:23    [18084419]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Alex_496
Member [заблокирован]

Откуда: https://www.dvbi.ru
Сообщений: 3869
Felagund,

если для хранения, то как посоветовал alexeyvg и другие товарищи
Но нужно еще смотреть с точки зрения аналитической обработки: если понадобятся вычисления из этих значений - складывать, особенно доли и прочие показатели, то удобнее оперировать одна строка и 300 полей.
Если количество полей динамическое, заранее не известное, то хранить и пополнять удобнее по первому варианту
29 авг 15, 00:30    [18084437]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
Спасибо всем за ответы, утром начну разбираться

Alex_496,
Количество полей фиксировано. Все значения являются результатами вычислений и шанс что данные будут перезаписываться мал, хотя не исключён.
29 авг 15, 00:39    [18084478]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
churupaha,

Данные - результат вычислений и все поля будут иметь какое-либо не NULL значение. Я так понял по этой причине sparse не стоит использовать?
29 авг 15, 00:45    [18084504]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Alex_496
Member [заблокирован]

Откуда: https://www.dvbi.ru
Сообщений: 3869
Felagund
Спасибо всем за ответы, утром начну разбираться

Alex_496,
Количество полей фиксировано. Все значения являются результатами вычислений и шанс что данные будут перезаписываться мал, хотя не исключён.


тогда оформляйте атрибуты в поля. Я бы еще посмотрел и сделал вертикальное разбиение на 2-4 таблицы, связав их 1:1 по ключу записи. Предположу, что некоторые атрибуты более востребованы, другие - меньше. Заливать в отдельные таблицы можно параллельными потоками, индексами покрыть. Кстати, разреженность может уменьшиться, если в одну из таблиц сгруппировать редко заполняемые атрибуты
29 авг 15, 01:05    [18084574]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Felagund
alexeyvg, я может некорректно выразился. 300 значений это только одна запись в таблице.
А, 300 полей? А что такого, 300 атрибутов у сущности разве не может быть? Если это не какие то меняющиеся атрибуты...
29 авг 15, 02:09    [18084697]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Felagund
Member

Откуда:
Сообщений: 9
Alex_496,

А какой смысл делать вертикальное разбиение? Это увеличивает скорость обработки запроса?
Все атрибуты используются с одинаковой частотой, кроме четырёх, которые являются показательными и используются чаще.
29 авг 15, 14:15    [18085492]     Ответить | Цитировать Сообщить модератору
 Re: Большое количество атрибутов сущности  [new]
Alex_496
Member [заблокирован]

Откуда: https://www.dvbi.ru
Сообщений: 3869
Felagund
Alex_496,

А какой смысл делать вертикальное разбиение? Это увеличивает скорость обработки запроса?
Все атрибуты используются с одинаковой частотой, кроме четырёх, которые являются показательными и используются чаще.


Детали Вашего случая мне не были известны, в моем случае - многие атрибуты редко используются.
Вертикальное разбиение, возможно, поможет сократить разреженность: в одну таблицу складываете всегда заполняемые атрибуты, а в другую - атрибуты, которые не все заполняются. Возможно, в 1-ой таблице у Вас будет 100 тыс. записей, а во 2-ой - 80 тыс. записей. Можно инсертить разными потоками, если атрибуты собираются из разных таблиц, источников. Таблицы разместить на разных дисках. Общая длина записей уменьшится -> меньше расщепление страниц, фрагментации. Наконец, разграничить права доступа проще, если не все должны видеть все атрибуты.
29 авг 15, 15:24    [18085649]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить