Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> таблицу типа "таблицы умножения" в БД 
:(
    Опции темы
shuttle
Дата 26.3.2011, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Всем известно что такое таблица умножения. Умножаем число а на число b - находим в верхней строке число a, в первом столюце число  b и на их пересечении получаем результат.
Допустим в БД есть такая таблица - как с ней работать, т.е. когда пишем запрос мы указываем название столбца и значение = на выходе результат несколько строк, в которых значение в данном столбце равно заданному в условии. 
А тут получается надо найти сначала нужный столбец, потом строку и на перекрестье получить их значение.
Перебиваить таблицу, так что бы указывать все комбинации идея плохая.
Как в БД работают с такими таблицами?
--------------------
PM MAIL   Вверх
Экскалупатор
Дата 26.3.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



shuttle, что то мне кажется сомнительным что в бд могут понадобиться подобные таблицы. их всегда можно представить в более логичной(с точки зрения реляционной модели) формы. в какой реальной задаче может понадобится таблица с подобным устройством?

отступление: коль уж сильно надо, то выбери столбец и отсчитай количество строк, получится требуемая ячейка. т.е. если 3х4 то выбираем столбец № 3 и в этом столбце смотрим результат 4.
PM MAIL ICQ   Вверх
jonie
Дата 26.3.2011, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



угу, нечто вроде
Код

int a = 10;
int b = 20;
string sql = "select col" + a + " FROM tab WHERE rowId=" + b;

...
SqlCommand sqlcmd = new SqlCommand(sql);
int result = (int)sqlcmd.ExecuteScalar;




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Gluttton
Дата 26.3.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата(shuttle @  26.3.2011,  20:23 Найти цитируемый пост)
Как в БД работают с такими таблицами? 

Я бы сделал это так:
Код

create table rows
(
    value int
);

insert into rows (value) values (0);
insert into rows (value) values (1);
insert into rows (value) values (2);
insert into rows (value) values (3);
insert into rows (value) values (4);
insert into rows (value) values (5);
insert into rows (value) values (6);
insert into rows (value) values (7);
insert into rows (value) values (8);
insert into rows (value) values (9);

create table columns
(
    value int
);

insert into columns (value) values (0);
insert into columns (value) values (1);
insert into columns (value) values (2);
insert into columns (value) values (3);
insert into columns (value) values (4);
insert into columns (value) values (5);
insert into columns (value) values (6);
insert into columns (value) values (7);
insert into columns (value) values (8);
insert into columns (value) values (9);

select
    rows.value * columns.value as value
from rows, columns
    wehe rows.value = 2
    and columns.value = 2;



--------------------
Слава Україні!
PM MAIL   Вверх
Экскалупатор
Дата 26.3.2011, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



и все таки я думаю что подобные таблицы использовать не кошерно, вроде одно из правил нормализации гласит что если поле можно вычислить то оно не должно содержаться в таблице в явном виде. в случае с таблицей умножения ее можно вычислить всю. а какие данные можно было бы хранить в таком виде и при этом их нельзя было бы вычислить я представить не могу. в любом случае можно сделать вполне нормальную структуру таблиц и избежать такого непонятного хранения как хочет топикстартер.
PM MAIL ICQ   Вверх
Gluttton
Дата 26.3.2011, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата(Экскалупатор @  26.3.2011,  22:52 Найти цитируемый пост)
а какие данные можно было бы хранить в таком виде и при этом их нельзя было бы вычислить я представить не могу.

Это конечно же офтопик, но тем не менее...

Может быть такой случай если необходимо хранить в таблице фактические значения измеряемых величин.
Например если необходимо в таблице хранить данные о значении напряженности электромагнитного поля некоторого источника на разных высотах и удалениях, то результатом может стать таблица обращаясь к которой с запросом будет смысл получать значение именно одной ячейки на пересечении конктетной строки (например высота) и конкретного столбца (например удаление).

Но в то же время, если в такой таблице хранились бы значения не фактические, а расчетные, то тогда целесообразность такой таблицы была бы сомнительна.

Всё чисто субьективно.


--------------------
Слава Україні!
PM MAIL   Вверх
Экскалупатор
Дата 27.3.2011, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



Цитата(Gluttton @  26.3.2011,  22:00 Найти цитируемый пост)
Например если необходимо в таблице хранить данные о значении напряженности электромагнитного поля некоторого источника на разных высотах и удалениях, то результатом может стать таблица обращаясь к которой с запросом будет смысл получать значение именно одной ячейки на пересечении конктетной строки (например высота) и конкретного столбца (например удаление).

я про это и говорил, даже в таких условиях гораздо логичнее было бы сделать таблицу высот, таблицу удаления и таблицу значений, а не городить все в одну кучу. но это имхо.
PM MAIL ICQ   Вверх
jonie
Дата 27.3.2011, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



Экскалупатор, мне только один раз понадобилась такая конструкция - это был отчет по датам в mssql2000 (он не поддерживает PIVOT)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Экскалупатор
Дата 27.3.2011, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



jonie, и его оказалось удобнее хранить в такой конструкции? а если разбить на несколько таблиц? мне если честно не приходилось с подобным сталкиваться, так что тема интересна.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1002 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.