Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как культурно вывести таблицы в таблицу / 25 сообщений из 32, страница 1 из 2
25.07.2013, 07:46
    #38343116
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Насмотревшись на цитаты проектов и куски кодов возник вопрос как выводят все эти несусветные наименования полей в интерфейс клиентов. Я наверно чего-то не знаю, может быть принято в каждой БД иметь таблицу namespace или типа того. Такого рода примеров по сети не встречал и подозреваю что преобразование осуществляется приложением, то есть приложение начинает слишком много знать о БД и становится частью БД.

Например есть талицы customer(id, country_id, name); country(id, title);

Как вы покажете в интерфейсе отчет? Получается что так:

customer: Иван Иванов
country: Россия

Чтобы сделать нормально, придется сообщить скрипту все необходимое. В синтаксисе php например:

Код: plaintext
<span>Страна: <?=$rst->country;?><span>

или

Код: plaintext
$span .= 'Страна: ' . $rst->country

где $rst->country - переменная country со значением названия страны.

Но откуда вы знаете что country - страна? Посмотрели в словаре. Прекрасно. А если поле называется custappstoregoods097. Таких слов не бывает. Получается надстройка над БД в виде девелопера который единственный кто знает что к чему между БД и приложением.

Я понимаю это способ унасекомить клиента. Посмотрев в БД он внезапно поймет что без вечной славы девелоперу не обойтись, а значит дети девелопера не будут голодать.

А на самом ли деле все именно так? Я думаю что все наоборот. Чем страшнее выглядят БД в натуре и коды изнутри, тем меньше клиентов которые бы пожелали себе такое счастье - попасть в сети к девелоперу навечно. Кроме того проектировщик сам страдает, теряет время и силы на преодоление нелепых трудностей перевода.

Кроме того вдруг найдется девелопер который решит что пора уже упрощать и отберет всех клиентов не менее внезапно?

Чтобы сделать нормально

Покупатель: Иван Иванов
Страна: Россия

Надо назвать поля по смыслу и по-русски и вывести так. Я выбрал синтаксис ms-vb как самый очевидный.

Код: plaintext
rst.field(0).name & ": " & rst.field(0).value

В этом случае скрипт вообще ничего не знает о БД кроме того, что там есть запись, и есть поле с индексом 0.

Можете возразить что про 0 все равно надо знать, потому что где 0 там имя, а где 1 там страна.

Возразить нельзя. Все что требуется вывести определяется не в скрипте, а в самом запросе. Скрипт просто выведет все что получит в цикле перечисления полей и значений. Если не требуется выводить поле Страна исключите его из запроса и скрипт выведет единственную запись единственного поля.

Покупатель: Иван Иванов.

Дальше хуже. Как вывести таблицу в таблицу, если в названиях полей таблицы тарабарщина? Каждому запросу сопоставлять индивидуальный шаблон?
...
Рейтинг: 0 / 0
25.07.2013, 07:53
    #38343120
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Да, не rst.field(0), но rst.fields(0) конечно.
...
Рейтинг: 0 / 0
25.07.2013, 08:08
    #38343124
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Давая таблицам и полям кодированные имена девелопер первым делом унасекомит сам себя. Имя поля превращается в код поля. Соответствие кода - имени прописывается в исходном тексте приложения. Что совершенно однозначно является нарушением заповедей Кодда.

Еще можно возразить что названия таблиц и полей как правило редко отображаются в интерфейсе. Так потому и редко, что затрахаешься переводить на человеческий язык. Разраб попросту избегает этой задачи и вместо

Покупатель: Иван Иванов
Страна: Россия

выводит

Иван Иванов
Россия

Понятно же и так что где. Нет же покупателя Россия и страны Иван Иванов.

Вполне понятно откуда растет идиосинкразия к кириллице и я двумя руками за то, чтобы перейти на латиницу. Mnogestvo nashih sorodichey pishut latinskimi bukvami no pochti po-russki. Однако вряд ли такое возможно в ближайшие 200 лет, поэтому придется пользоваться контрафактным алфавитом (Киря и Мифа наш алфавит попросту натырили).

Но самое смешное что большинство разрабов которые кодируют таблицы и поля типа английскими словами - по-английски вообще не читают.

Начинайте проект сразу в юникоде, проверяйте все настройки и кодировки на юникод и абсолютно никаких проблем с кириллицей не будет.
...
Рейтинг: 0 / 0
25.07.2013, 09:03
    #38343153
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Поскольку я насмотрелся, то могу сказать что делается в основном так (на пхп)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<? $rst = $link->query($q); ?>

<table>
  <tr>
    <td>Покупатель:</td>
    <td><?=$rst->customer?></td>
  </tr>
  <tr>
    <td>Страна:</td>
    <td><?=$rst->country?></td>
  </tr>
  <tr>
    <td>Город:</td>
    <td><?=$rst->city?></td>
  </tr>
  <tr>
    <td>Улица:</td>
    <td><?=$rst->street?></td>
  </tr>
</table>



Вся эта шняга записывается в файл с именем типа customeraddress.tpl.php и затем подгружается в нужном месте include();

Чтобы вывести форму для всех этих полей пишется еще один шаблон, или крайне хитромудро модифицируется предыдущий в зависимости от значений какой-нить переменной. Еще можно токенизировать и разработать уже свой собственный мета-язык который бы снабжал результат запроса той или иной формой. Это при том что стопицот лет назад уже разработаны xml и xslt.

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

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?

$rst = $link($q);

$table = '<table>';
while($fld = $rst->fetch_assoc()):
  $key = key($fld);
  $table .= '<tr><td>' . $key;
  $table .= '<td>' . $fld($key) . PHP_EOL;
endwhile;
$table = '</table>';

echo $table

?>



Простейший код который выведет таблицу из 2 столбцов повернутую на бок: названия полей слева в строках. Это самый распространенный вид вывода сведений о сущности, скажем о товаре где слева название свойства, справа значение свойства.

Чтобы вывести таблицу типа отчета с названиями полей в столбцах надо прописать отдельно генерацию заголовков и строк.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// заголовки
$table = '<table><tr>';
while($col = $rst->fetch_field()):
  $table .= '<td>' . $col->name;
endwhile;

// строки
while ($row = $rst->fetch_row()):
  $table .= '<tr>';
  for($n = 0; $n < $rst->field_count; $n++):
    $table .= '<td>' . $row[$n]);
  endfor;
endwhile;
$table = '</table>';

echo $table;



И вот сравните что имеет разраб за кодирование названий таблиц и полей - неуправляемую кучу шаблонов на все случаи жизни и варианты запросов, и что имеет разраб когда именует таблицы и поля напрямую - одну функцию в дюжину строк. Хотя бы даже и по-английски, но нормальными словами и фразами.

Чтобы вывести форму с полями ввода используется та же самая функция. Внутрь ячеек запихиваются input'ы всякие. Кроме того через объект $col можно узнать много полезного для правильной генерации полей ввода и для проверки чего там юзер ввел. fetch_field дает кучу инфы.

На других языках полагаю будет точно так же.
...
Рейтинг: 0 / 0
25.07.2013, 09:18
    #38343171
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
И про indentity. Это вообще может показаться кощунством, но если вы начнете напрямую именовать таблицы и поля на русском языке, то и все эти id можно превратить в слово код.

В жизни мы запросто говорим код города, код товарной номенклатуры (ТН ВЭД, которые на самом деле КТН УВЭД), так что и с кодами в таблице не должно быть проблем.

Кстати, имея нормальное имя таблицы его можно вывести в caption:

Код: plaintext
$table .= '<caption>Таблица: ' . $col->table . '</caption>';

Для целей адекватного отображения полей и контроля за целостностью данных функция

http://www.php.net/manual/en/mysqli-result.fetch-field.php

дает практически все необходимое. Только вот почему-то COMMENT забыли включить в сборник.
...
Рейтинг: 0 / 0
25.07.2013, 09:20
    #38343175
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Варианты типа запузырить нормальные псевдонимы во все кодированные имена полей в запросах конечно имеют право на жизнь, но тогда возникает вопрос: ради чего кодировать имена вообще?
...
Рейтинг: 0 / 0
25.07.2013, 09:27
    #38343184
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Вопрос отображения данных освещен со стороны веб-технологий потому что в нормальных языках такого вопроса не существует. Там давно разработаны объекты типа datagrid и любой элемент управления можно тупо связать с любым полем щелчком мыши. Выводить вручную конечно можно тоже, но кто это делает кроме конченых?

Я тоже избегал кириллицы сколько мог, но именовал английскими словами и фразами, без кодирования. Да и сам интерфейс моих апликух был на английском и сами они главным образом предназначались мне самому. Работа для народа сразу выявила проблему и я ее решил просто - писать на русском. Пока что полет нормальный как говорят.
...
Рейтинг: 0 / 0
25.07.2013, 09:34
    #38343199
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
deblogger,

не комплексуй
...
Рейтинг: 0 / 0
25.07.2013, 09:53
    #38343219
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Конечно можно вообще без кодов обойтись воспользовавшись функцией CONCAT();

И последнее, потребуется backticks. Независимо от языка, если поля называются нормально, то они будут из двух, а то и трех слов типа Имя пользователя, Название магазина.

К сожалению ` на клаве заведен с буквой ё, что немедленно заколебет если поля на русском. Проще будет обучить свой текстовый редактор вставлять backticks по нажатию этой клавиши независимо от раскладки клавы. НоутпадПлюс это умеет.

Конечно ё уже не удасться ввести. Думаю небольшая потеря.
...
Рейтинг: 0 / 0
25.07.2013, 10:50
    #38343309
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Слои абстракции можно изобретать бесконечно.
А для решения задачи грамотный специалист найдет оптимальную точку, где следует остановиться.
...
Рейтинг: 0 / 0
25.07.2013, 11:14
    #38343358
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
ViPRosdeblogger, не комплексуй
+1

И я ещё посоветовал бы не путать форум с блогом.
...
Рейтинг: 0 / 0
25.07.2013, 12:05
    #38343433
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Кто здесь?
...
Рейтинг: 0 / 0
25.07.2013, 12:40
    #38343500
Бредятина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
deblogger, при использовании СУБД таких проблем не существует. СУБД поддерживают содержательные метаданные, а не только технические, и интерактивный интерфейс на основе семантически развитой модели данных. Иначе, это не СУБД. Все эти вопросы на форуме обсуждались много раз.
...
Рейтинг: 0 / 0
26.07.2013, 05:50
    #38344555
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Бредятина,

Я же показал пример такой СУБД выше. Метаданные описываются в мириадах шаблонов, шаблоны учитываются в БД, надо полагать тем же способом и конца края этому разгулу спящего разума нет.

Ну хорошо, а что дает кодирование названий таблиц и полей?

Дело ведь не в том что вы даете названия типа Product, Category, Catalog, Report и тому подобные. Ну пожалуйста пишите по-английски, никто не запрещает делать англоязычный интерфейс.

Но какой практический смысл в именах типа supplonehaveadog095?

Я пытался доказать что проблема в том, что бдями занимаются программисты. Они так привыкли и это нормально. Никакой нормальный программист не будет давать переменным публичные имена, хотя самые вменяемые не ленятся и называют типа counter_that_control_over_this_cycle. Программист как писал int cnt, так и поля с таблицами назовет.

Потому что для него БД это всего лишь такая большая-большая переменная объектного типа. Врубаться в отношения и во все остальное в чем смысл БД программист не будет.

Мы в рубрике проектирование БД и я просто хотел показать как не надо проектировать, и как надо. На самом примитивном уровне, с которого все и начинается.
...
Рейтинг: 0 / 0
26.07.2013, 05:56
    #38344558
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Программист относится к БД так же, как слесарь к автомобилю, к которому совсем по-другому относится инженер, коими и являются читатели данной рубрики. Не уподобляйтесь слесарям которые только и умеют что курочить что инженер создал. Создавайте.

Насчет метов. Интересное явление. mysqli fetch_field не возвращает COMMENT поля. Программисты делали объект.
...
Рейтинг: 0 / 0
26.07.2013, 09:11
    #38344627
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
deblogger
Я пытался доказать что проблема в том, что бдями занимаются программисты.
Одобряю Ваше начинание.
Достижения технологий "бдей" позволяют широкому кругу лиц создавть оные. Но, возможно, "бди" иногда могут быть не удачно спроекированы, и поэтому требовать излишних програмистких ухищрений, чтобы это компенсировать. Часто программисты по началу охотно идут на эти ухищрения, а не исправления "бдей", так для них прогерсто проще. В дальнейшем, даже если поймут, что менять надо "бдю", эти заплатки будут мешать (их дорого переделывать все). Все это может приводить к снжению качества жизненного цикла ИС.
...
Рейтинг: 0 / 0
26.07.2013, 10:06
    #38344694
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
debloggerПотому что для него БД это всего лишь такая большая-большая переменная объектного типа. Врубаться в отношения и во все остальное в чем смысл БД программист не будет.
Правда что-ли?
Попробуй подумать немного наперед.
Например, какие имена будут у полей "Почтовый индекс", "Населенный пункт", "Город", "Улица" и т.п. Особенно с учетом того, что все эти поля обычно комбинируются в одно и называются "Адрес".
Какие имена полей будут у внешних ключей?
Какие имена полей будут у логических полей (флажков), со знаком вопроса?

Глупо описать весь программный продукт на одном уровне.
Потому и вводят разные слои абстракции, чтобы это делать не в ущерб эффективности.
...
Рейтинг: 0 / 0
26.07.2013, 12:43
    #38345031
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
deblogger,

уже давным давно хорошей практикой при проектировании базы является проектирование в ней же и база метаданных в которой все и хранится
...
Рейтинг: 0 / 0
26.07.2013, 18:56
    #38345925
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
sp,

Я главного не пойму - где возражения? Единственный предыдущий читатель чем-то таким напугал, но не до конца.

Дело же не в том что поля по-русски или по-китайски названы. Дело в том что у многих это не названия, а некие коды, смысла в которых без комментариев не поймешь.

Грубо говоря каждая программистская башка говорит на своем языке. Эффективность коммунити стремиться к нулю, растет обособление, окукливание, ошмукливание и в итоге отсталость.

Я этот форум нашел случайно. Дай думаю почитаю на родном что пишут о модели nested set. Блин, практически ровно одна статья на весь рунет - и она тут! Это разве не отсталость?

Прекрасно знаю что программисты во всем мире по упертости вторые после шоферни, но мы, самые упертые наверное.

Я тут портянки пишу, а хоть бы кто пришел и как следует напугал. Типа вот напишешь вместо wholepriceonagent007 нечто типа `Whole Price on Agent 007` и капец твоей датабазе.
...
Рейтинг: 0 / 0
26.07.2013, 19:03
    #38345942
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
spуже давным давно хорошей практикой при проектировании базы является
проектирование в ней же и база метаданных в которой все и хранится
Самое забавное, что в любом сервере БД уже изначально есть база метаданных, которая
называется "словарь".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.07.2013, 19:06
    #38345950
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Разве никому тут не приходилось править чужие коды? Да я и свои-то могу после четверти часа раздумий как мне такое удалось наворотить. Пройдет полгода и сырец без комментариев с халявными названиями переменных становится чужим. Ключевое слово тут - халява. Кавычки не ставить, понимаешь, это удобно. Один чел на переполненном стеке так прямо и заявил что backtick'и делают его коды поломатыми.

Но откройте любую публичную библиотеку из репозитория куда грамотные люди принимают только удобоваримые куски и почувствуйте вкус настоящей халявы позднего связывания.

Халява раннего связывания приводит к несварению.
...
Рейтинг: 0 / 0
26.07.2013, 19:10
    #38345959
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Dimitry SibiryakovСамое забавное, что в любом сервере БД уже изначально есть база метаданных, которая
называется "словарь".


Одуреть. И что, этот словарь может перевести содержание этого сообщения? Или в чем разница между содержанием и формой по-вашему?

Ну назову я поле onedaywhenworldwilldie, сопоставлю фразе и что это мне даст такого, чего я не могу получить назвав поле `One day when world will die`?

Это что, на самом деле таков масштаб бедствия с кавычками, что ради их отсутствия люди словари заводят в бд?

Словари существуют чтобы переводить с одного языка на другой. Когда язык не детерминирован, какой в одно место может быть перевод?
...
Рейтинг: 0 / 0
26.07.2013, 19:20
    #38345972
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Самое удивительное что даже подчеркивания не используют если уж такая идиосинкразия к пробелам, и тем более к русскому езыгу.

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

Не процедурно - системно. Предусмотреть в интерфейсе отсутствие потребности в нижнем подчеркивании и заменить его символ в системном шрифте на пробел. :)
...
Рейтинг: 0 / 0
26.07.2013, 19:22
    #38345973
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
Напомню господам инженерам что тема не про технику, а про культуру!

Однако без техники культуры не бывает. Все искусства возникли в результате технического прогресса.
...
Рейтинг: 0 / 0
26.07.2013, 19:25
    #38345977
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как культурно вывести таблицы в таблицу
deblogger Типа вот напишешь вместо wholepriceonagent007 нечто типа `Whole Price on Agent 007` и капец твоей датабазе.

"Капеца датабазе" - не будет. Толку тоже будет исчезающе малое количество.
Нравится - развлекайтесь.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как культурно вывести таблицы в таблицу / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]