Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#766: 2011-10-09 13:34:33 ЛС | профиль | цитата
Tad, я думаю даже на фондовой бирже такой скорости не будет Так что наши с тобой рассуждения имеют чисто теоретический характер.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#767: 2011-10-09 13:39:28 ЛС | профиль | цитата
iarspider писал(а):
3. Связывание таблиц (см. того же Грабера)
Tad писал(а):
Какое мне дело - какой уникальный ID будет присвоен следующей записи ?
главное, чтобы он был УНИКАЛЬНЫМ. При правильном подходе, что-то типа
...... WHERE rasxod.idprod=prod.id мне наплевать какой id присвоен продукции
так как при заполнении расходной накладной я выбираю "Название продукции", а при сохранении в таблицу rasxod заношу id Продукции, не заглядывая ей в лицо.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#768: 2011-10-10 05:37:25 ЛС | профиль | цитата
Tad, можно пример как бы это выглядело со столбиком индекс(Index,Text)?
не могу понять как sqlite устроена
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#769: 2011-10-10 10:49:26 ЛС | профиль | цитата
hitman249 писал(а):
не могу понять как sqlite устроена
Прикалываешься ? Или на самом деле ?
Грубо говоря, если будешь считать, что таблица БД это "обыкновенный текстовый файл", состоящий из пронумерованных строк(записей), то примерно оно так и есть.
hitman249 писал(а):
пример как бы это выглядело со столбиком индекс(Index,Text)?

А последний пример testBD2.rar http://forum.hiasm.com//getfile/25417 смотрел ?
Там колонка nzap-Index, а колонка asd-данные.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#770: 2011-10-10 11:12:33 ЛС | профиль | цитата
Tad писал(а):
Грубо говоря, если будешь считать, что таблица БД это "обыкновенный текстовый файл", состоящий из пронумерованных строк(записей)

Вот именно, что "грубо говоря". Скорострельность, указанного тобой, примера базы оставляет желать лучшего. На самом деле, ты забыл указать самое главное -- таблицу индексации, ускоряющее на порядки скорость доступа к конкретному элементу базы, и структура такой базы немного отличается от примера и схож больше с файловой системой
------------ Дoбавленo в 11.12:
Вообще-то, твой пример больше похож на структуру *.csv, вот там точно, именно такой вариант базы. Там именно так и сделано -- строки идут одна за другой, и столбцы разделены определенным разделителем в строке
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#771: 2011-10-10 11:48:54 ЛС | профиль | цитата
nesco, ну и нахрена hitman249-у сейчас эти тонкости ?
И колонки в SQLite никакими делимитерами не разделены. так что я должен был ему расшифровать и "фотогафию" строки ? Оно ему надо ?

Потому и написал "Грубо".
nesco писал(а):
твой пример больше похож на структуру *.csv
Ага, *.csv - это совсем "список нумерованных строк"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#772: 2011-10-10 11:52:51 ЛС | профиль | цитата
Tad писал(а):
Ага, *.csv - это совсем "список нумерованных строк"

Если первым элементом в строке будет индекс строки, то будет именно список нумерованных строк
карма: 22

0
Ответов: 1528
Рейтинг: 57
#773: 2011-10-10 11:56:46 ЛС | профиль | цитата
Tad, кстате о нумерации.
Ну вот
INSERT INTO "jz" VALUES('index','text');

наинзертил я строчек 20, потом взял наугад любую строчку удалил, что с колонкой index теперь делать чтобы восстановить порядок нумерации?
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#774: 2011-10-10 14:02:12 ЛС | профиль | цитата
nesco писал(а):
Если первым элементом
это "если будет", а есле нет. А в БД rowid есть для каждой строки.
hitman249 писал(а):
что с колонкой index теперь делать чтобы восстановить порядок нумерации?
с какой стати - по идее индекс присваивается раз и на всегда. На то он и индекс.
Сейчас на работе. Вечером подробней.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#775: 2011-10-10 14:06:42 ЛС | профиль | цитата
Tad писал(а):
А в БД rowid есть для каждой строки

Ну, это физический адрес строки в таблице индексов. Принцип построения SQlite таблицы отличается от обычной строковой базы. В принципе, rowid не предусмотрен стандартом SQL, это фича SQlite
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#776: 2011-10-10 15:28:48 ЛС | профиль | цитата
nesco писал(а):
rowid не предусмотрен стандартом SQL, это фича SQlite

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#777: 2011-10-10 15:43:13 ЛС | профиль | цитата
Tad, и где у нас в книге по SQL есть хотя бы одно упоминание rowid, ссылку в студию
------------ Дoбавленo в 15.39:
Если быть более точным то rowid вошел в SQlite из Oracl-a, так что насчет фичи именно SQlite я погорячился. Но вот в стандарте я его не нашел, как не нашел и запроса REPLACE
------------ Дoбавленo в 15.43:
Вот, кстати, описание rowid от Qracle

5.2 Псевдостолбец ROWID

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

Наиболее употребимым и важным из них является ROWID — псевдостолбец, являющийся уникальным идентификатором строки. Он не просто гарантированно уникален в рамках таблицы — более того: он уникален в рамках базы данных. С физической точки зрения ROWID является своеобразной координатой записи в базе.

Необходимо отметить, что существование ROWID противоречит как минимум двум из двенадцати известных правил Кодда, описывающих требования к реляционной СУБД. Во-первых, ROWID нарушает правило номер 2, которое гласит: «К каждому элементу данных должен быть обеспечен доступ при помощи комбинации имени таблицы, первичного ключа строки и имени столбца». В данном случае ROWID не является первичным ключом, хотя ввиду его уникальности для каждой строки он может выступать в роли первичного ключа.


Во-вторых, нарушается правило Кодда номер 8: «Прикладные программы не должны зависеть от используемых способов хранения данных на носителях и методов обращения к ним». Нарушение этого правила происходит из-за того, что ROWID по своей сути является физической координатой записи, поэтому он будет изменяться в случае пересоздания таблицы, перезагрузки данных, перемещения таблицы из одного табличного пространства в другое и т.п. Однако ROWID уникален и неизменен в течение сеанса пользователя, поэтому приложение может считать его неизменным.

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

Рассмотрим простейший пример запроса, извлекающего ROWID строк:

SELECT ROWID, Name FROM ARTIST;

Кстати, очень интересны два описанных противоречия. Откуда можно сделать вывод, что использование его для стандартизации запросов к разным базам недопустим. Об этом как-то давно и писалось у нас на форуме. Ты широко поддерживал rowid, а Dilma категорически был против его использования, теперь ясно почему
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#778: 2011-10-10 16:26:00 ЛС | профиль | цитата
nesco писал(а):
и где у нас в книге по SQL есть хотя бы одно упоминание rowid

Заходишь сюда http://ami.nstu.ru/~vms/lecture/lecture13/lecture13.htm и в "поиске на странице" набираешь rowid.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#779: 2011-10-10 16:35:09 ЛС | профиль | цитата
Tad писал(а):
Заходишь сюда

А, понятно -- стандарт SQL'03, я опирался на SQL'92, там его нет. А вот в SQL'03 REPLACE тоже нет, вот эта фича уже похожа на SQLite-овскую. Спасибо, буду знать. Вот только для старых движков rowid может не прокатить. А есть ли где-нибудь описание rowid в книгах, у Грубера описания нет
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#780: 2011-10-10 16:52:21 ЛС | профиль | цитата
rowid используют все БД для создания индексных файлов, а вот прямой доступ к нему, помоему, только у Оракула и SQLite.
[url писал(а):
http://www.sqlite.org/lang_replace.html[/url]]The REPLACE command is an alias for the "INSERT OR REPLACE"

Посмотри внимательно на диаграмму insert http://www.sqlite.org/lang_insert.html
Верхняя ветвь INSERT, INSERT OR REPLACE
Нижняя ветвь чистый REPLACE
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)