Tad, я думаю даже на фондовой бирже такой скорости не будет Так что наши с тобой рассуждения имеют чисто теоретический характер.
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
iarspider писал(а): 3. Связывание таблиц (см. того же Грабера)Tad писал(а): Какое мне дело - какой уникальный ID будет присвоен следующей записи ?...... WHERE rasxod.idprod=prod.id мне наплевать какой id присвоен продукции так как при заполнении расходной накладной я выбираю "Название продукции", а при сохранении в таблицу rasxod заношу id Продукции, не заглядывая ей в лицо. |
|||
карма: 25 |
|
Ответов: 1528
Рейтинг: 57
|
|||
Tad, можно пример как бы это выглядело со столбиком индекс(Index,Text)?
не могу понять как sqlite устроена |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
hitman249 писал(а): не могу понять как sqlite устроена Грубо говоря, если будешь считать, что таблица БД это "обыкновенный текстовый файл", состоящий из пронумерованных строк(записей), то примерно оно так и есть. hitman249 писал(а): пример как бы это выглядело со столбиком индекс(Index,Text)?А последний пример testBD2.rar http://forum.hiasm.com//getfile/25417 смотрел ? Там колонка nzap-Index, а колонка asd-данные. |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Tad писал(а): Грубо говоря, если будешь считать, что таблица БД это "обыкновенный текстовый файл", состоящий из пронумерованных строк(записей)Вот именно, что "грубо говоря". Скорострельность, указанного тобой, примера базы оставляет желать лучшего. На самом деле, ты забыл указать самое главное -- таблицу индексации, ускоряющее на порядки скорость доступа к конкретному элементу базы, и структура такой базы немного отличается от примера и схож больше с файловой системой ------------ Дoбавленo в 11.12: Вообще-то, твой пример больше похож на структуру *.csv, вот там точно, именно такой вариант базы. Там именно так и сделано -- строки идут одна за другой, и столбцы разделены определенным разделителем в строке |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco, ну и нахрена hitman249-у сейчас эти тонкости ?
И колонки в SQLite никакими делимитерами не разделены. так что я должен был ему расшифровать и "фотогафию" строки ? Оно ему надо ? Потому и написал "Грубо". nesco писал(а): твой пример больше похож на структуру *.csv |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Tad писал(а): Ага, *.csv - это совсем "список нумерованных строк"Если первым элементом в строке будет индекс строки, то будет именно список нумерованных строк |
|||
карма: 22 |
|
Ответов: 1528
Рейтинг: 57
|
|||
Tad, кстате о нумерации.
Ну вот INSERT INTO "jz" VALUES('index','text');
наинзертил я строчек 20, потом взял наугад любую строчку удалил, что с колонкой index теперь делать чтобы восстановить порядок нумерации? |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Если первым элементом hitman249 писал(а): что с колонкой index теперь делать чтобы восстановить порядок нумерации?Сейчас на работе. Вечером подробней. |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Tad писал(а): А в БД rowid есть для каждой строкиНу, это физический адрес строки в таблице индексов. Принцип построения SQlite таблицы отличается от обычной строковой базы. В принципе, rowid не предусмотрен стандартом SQL, это фича SQlite |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): rowid не предусмотрен стандартом SQL, это фича SQlite |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): и где у нас в книге по SQL есть хотя бы одно упоминание rowidЗаходишь сюда http://ami.nstu.ru/~vms/lecture/lecture13/lecture13.htm и в "поиске на странице" набираешь rowid. |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Tad писал(а): Заходишь сюдаА, понятно -- стандарт SQL'03, я опирался на SQL'92, там его нет. А вот в SQL'03 REPLACE тоже нет, вот эта фича уже похожа на SQLite-овскую. Спасибо, буду знать. Вот только для старых движков rowid может не прокатить. А есть ли где-нибудь описание rowid в книгах, у Грубера описания нет |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
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 |
|