|
|
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer(попросту - запитать все таблицы от одного секвенсора). Это не всегда возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:40 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Внутри сервера БД такая идентификация есть всегда, но она в большинстве случаев недоступна для разработчика и может меняться со временем. Доступна. А вот то что может меняться - это плохо - недоработка ((( Сергей Васкецовв таблице вообще-то могут быть даже полностью идентичные записи с точки зрения select * from table. Конечно, поэтому и нужен номер строки (а иначе как делать update ?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:41 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAВозможно не удивлю Вас, но такой идентификатор далеко не всегда представляет собой простое и однозначные число. А я про "простое и однозначные число" и не писал. Речь была просто о существовании некоего идентификатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:42 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод1. Доступна. А вот то что может меняться - это плохо - недоработка ((( 2. Конечно, поэтому и нужен номер строки (а иначе как делать update ?). 1. Не всегда все же это доступно. 2. Как делать update? Странный вопрос. В требовании к оператору update нет требования, что он обновляет не более одной записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:46 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов ChA Да, вторую Вашу реплику я вообще не понял :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:47 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовЭто не всегда возможно. Практически всегда. Для не желающих геморроиться есть гуиды, которые тоже не особо склонны повторяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:57 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов2. Как делать update? Странный вопрос. В требовании к оператору update нет требования, что он обновляет не более одной записи. Да нет, надо обновлять одну конкретную строку (например первую на экране). Т.е надо использовать rowid/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:59 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Сергей ВаскецовЭто не всегда возможно. Практически всегда. Для не желающих геморроиться есть гуиды, которые тоже не особо склонны повторяться. Sybase ASE 12 - невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:02 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA Действительно, если такое поведение позволяет себе то, что сейчас идет под названием РСУБД, то этого, оказывается, уже достаточно, чтобы считать теоретически обоснованным. Если теория не потдверждается практикой, то это уже не теория и даже не гипотеза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:03 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовSybase ASE 12 - невозможно. Если мне не изменяет память, Sybase ASE поддерживает Java. В Java можно сгенерить GUID. Неужели таки невозможно? Не расскажите ли, почему (это нисколько не возражение и не сомнение в Ваших словах, просто любопытно, что там такого железобетонного). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:09 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модЕсли теория не потдверждается практикой, то это уже не теория и даже не гипотеза.Угу. Т.е., если вам выдадут на работе премию в 1000$, например, а по приезду домой они будут отсутствовать в том кармане, куда вы их положили, это будет поводом для сомнения в полезности математики ? P.S. Не надо продолжать играть словами. Хотите делать, как делаете, ради Бога, но только не надо при этом делать умное лицо, и говорить, что в жизни нет места теории, если не сказать сильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:32 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Сергей ВаскецовSybase ASE 12 - невозможно. Если мне не изменяет память, Sybase ASE поддерживает Java. В Java можно сгенерить GUID. Неужели таки невозможно? Не расскажите ли, почему Во-первых, искать сущность по ее идентификатору, отличному от PK, если PK есть, смысла не вижу. Потому этот вопрос для меня практически в том числе равносилен возможности сделать guid суррогатным PK и потом делать join по нему. Удовольствие еще то. Во-вторых, вот что есть в systypes для Adaptive Server Enterprise/12.0.0.8/P/EBF 13229 ESD5/NT: binary bit char datetime datetimn decimal decimaln extended type float floatn image int intn money moneyn nchar numeric numericn nvarchar real smalldatetime smallint smallmoney sysname varbinary varchar Ничего похожего на guid нет, в том плане, что кроме генерации придется пользоваться и поиском по нему. То есть, брать придется либо char, либо binary, и без контроля типа "внутри". На ASE 12.0 даже identity может быть только numeric и decimal. Такая вот плата за совместимость хотя бы на уровне архитектуры с "ведущей пятеркой производителей СУБД" (предпочел бы эту тему здесь не продолжать, просто комментарий "к слову"). Но все еще остававшиеся надежды рушатся, как только вспоминаешь, что есть только аfter-триггера и только statement-ового типа. А делать PK не обязательным полем даже если у меня будет справка от Кодда, разрешающая это, я не стану :). Формировать PK всегда на клиенте (ну или писать отдельную процу на каждую таблу с передачей ей всех обязательных параметров) и усложнять запросы вида insert ... into и insert ... select особой прелести не вижу. Потому практически это использовать невозможно. Кроме того, лицензия ASE_JAVA стоит дополнительных денег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:36 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAно только не надо при этом делать умное лицо, и говорить, что в жизни нет места теории, если не сказать сильнее. Последовательность такая: гипотеза->факты, согласующиеся с гипотезой->теория->факты, не согласующиеся с теорией->новая гипотеза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:43 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Спасибо, в целом позиция понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:46 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mir YulkaВвиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД.Да, в общем, и нет никакой проблемы. Тем более такой, чтобы решать на уровне СУБД. А что такое "миграции неключевых"? Мне показалось, что Вы ниже согласились со мной, что суррогатные ключи нужно прошить в подкорку. Но они не прошиты, и вводится и суррогатный PK и UNIQUE INDEX на потенциальные ключи. В то время как это (если исключить изменчивость естественных) - по сути одно и то же, и может быть использовано как одно и то же. Но ввиду того, что те, что я объявила UNIQUE INDEX, не являются PK, я не могу их точно также использовать дальше (в вычислениях, в зависимых таблицах), а должна вручную их контролировать там. Это я условно и назвала транзитным ключом, наследованием и синтезом разные модификации еще называют. Я не говорю, что они всем нужны, но мне там нужны, я вычислениями занимаюсь, а не учетные задачи пользователя обслуживаю. автор YulkaВопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?Все нормальные РСУБД для PK автоматически создают UNIQUE INDEX, с помощью которого и проверяется уникальность. "Руками" делать ничего не надо. Простите, я подумала, что понятно из контенста предыдущих обсуждений и обсуждаемой ситуации: есть суррогатный PK и ДРУГИЕ поля, являющиеся UNIQUE INDEX для данной таблицы. Проверять уникальность PK и их ОТДЕЛЬНО это бред, с моей т.з. Вот я и спрашивала, оптимизирована ли такая ситуация в современных СУБД. автор YulkaИ студентов с множествами учить работать, а не с ключами.Это что же за такое противопоставление: множества VS. ключи? Что бы это значило? Это противопоставление содержательной разработки (теоретико-множественных органичений предметной области) и технической реализации, которая (в ключах, в моделях данных, в СУБД и т.д.) может быть разная. авторСУБД работает с множествами - адресуемыми элементами данных. Адресное пространство - множество в силу своего устройства. Все проблемы - во взаимодействии с внешним миром. Например, мы знаем, что люди образуют множество, но не имеем возможности эффективно его представить. Более того если однажды установлена связь человека и записи БД, то нет 100% надежного способа эту связь сохранить. Извините, но я не считаю, что люди образуют множество. Это разные миры: множество это теоретический искусственный объект, используемый для контроля и оперирования стабильным общим, а люди и другие объекты они бесконечны (в смысле непознаваемы до конца, никакого определения человека пока не придумано), и мы им приписываем те признаки (из бесконечного многообразия признаков), который нам нужны для оперирования ими. Я считаю, что люди - это еще очень благодарные объекты для приписывания признаков - они хотя бы рождаются и умирают, и во времени пока не путешествуют. Соответственно для таких объектов, если бы мы жили в матрице, нужна система регистрации рождения и смерти, она по крайней мере гарантирует идетифицируемость, а дальше просто гарантировать, чтобы они свой идентификатор таскали всегда с собой и не могли от него избавиться (тут прав Сахават). Других путей полной идетификации людей и аналогичных объектов я, например, не вижу. авторYulka Опять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО 1. Таблица вообще не множество 2. Пример: поток событий - могут отличаються только порядковым номером, т.е. номером строки таблицы. Если Вам множества не нужны, то не используйте их, всему свое место. А поток событий, отличающихся только порядковым номером (если он не значимый, конечно, этот порядок, потому как порядок может быть только на множестве, например, это порядок во времени возникновения, то уже может понадобиться в качестве множества), - это, действительно, не множество. Я бы для таких объектов использовала другие механизмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 18:23 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Ничего не понимаю, сплошной поток сознания :( P.S. Остается только наблюдать, так как участвовать в этом, IMHO, невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 18:36 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Yulka автор YulkaВопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?Все нормальные РСУБД для PK автоматически создают UNIQUE INDEX, с помощью которого и проверяется уникальность. "Руками" делать ничего не надо. Простите, я подумала, что понятно из контенста предыдущих обсуждений и обсуждаемой ситуации: есть суррогатный PK и ДРУГИЕ поля, являющиеся UNIQUE INDEX для данной таблицы. Проверять уникальность PK и их ОТДЕЛЬНО это бред, с моей т.з. Вот я и спрашивала, оптимизирована ли такая ситуация в современных СУБД. А кто гарантирует уникальность? Кто мешает назначить записи суррогатный ключ, который уже есть в таблице? Кто мешает назначить записи уникальный ключ, который уже есть в таблице? Исключить двойную проверку можно только при наличии взаимнооднозначного преобразования суррогатного первичного ключа в уникальный и наоборот и это преобразование должно находиться за пределами самой таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:26 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Yulka mir YulkaВвиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД.Да, в общем, и нет никакой проблемы. Тем более такой, чтобы решать на уровне СУБД. А что такое "миграции неключевых"? Мне показалось, что Вы ниже согласились со мной, что суррогатные ключи нужно прошить в подкорку. Но они не прошиты, и вводится и суррогатный PK и UNIQUE INDEX на потенциальные ключи. В то время как это (если исключить изменчивость естественных) - по сути одно и то же, и может быть использовано как одно и то же. Но ввиду того, что те, что я объявила UNIQUE INDEX, не являются PK, я не могу их точно также использовать дальше (в вычислениях, в зависимых таблицах), а должна вручную их контролировать там. Это я условно и назвала транзитным ключом, наследованием и синтезом разные модификации еще называют. Я не говорю, что они всем нужны, но мне там нужны, я вычислениями занимаюсь, а не учетные задачи пользователя обслуживаю. Ограничения целостности primary key и unique практически одинаково пригодны для создания внешних ключей. Я так понял раздражает то, что подменив живой внешний ключ на суррогатный мы теряем возможность определить декларативное ограничение целостности уровня записи в котором участвуют колонки живого ключа (теперь они находятся в справочной таблице). Это не большая проблема, в общем случае она решается на уровне триггеров БД, а создание триггеров, которые проверяют целостность данных как правило легко автоматизируется. В частных случаях значение суррогатного ключа может включать части живого ключа, которые можно использовать в декларативных ограничениях целостности для проверки соответсвия значения полей живого ключа и остальных полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:45 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Yulka автор YulkaВопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?Все нормальные РСУБД для PK автоматически создают UNIQUE INDEX, с помощью которого и проверяется уникальность. "Руками" делать ничего не надо. Простите, я подумала, что понятно из контенста предыдущих обсуждений и обсуждаемой ситуации: есть суррогатный PK и ДРУГИЕ поля, являющиеся UNIQUE INDEX для данной таблицы. Проверять уникальность PK и их ОТДЕЛЬНО это бред, с моей т.з. Вот я и спрашивала, оптимизирована ли такая ситуация в современных СУБД. А кто гарантирует уникальность? Кто мешает назначить записи суррогатный ключ, который уже есть в таблице? Кто мешает назначить записи уникальный ключ, который уже есть в таблице? Исключить двойную проверку можно только при наличии взаимнооднозначного преобразования суррогатного первичного ключа в уникальный и наоборот и это преобразование должно находиться за пределами самой таблицы. Нет, тут Вы совершенно правы, но я не предлагала не проверять, я предлагала проверять одновременно, а не каждый по отдельности. Может, неточно выразилась :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:49 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Я так понял раздражает то, что подменив живой внешний ключ на суррогатный мы теряем возможность определить декларативное ограничение целостности уровня записи в котором участвуют колонки живого ключа (теперь они находятся в справочной таблице). Это не большая проблема, в общем случае она решается на уровне триггеров БД, а создание триггеров, которые проверяют целостность данных как правило легко автоматизируется. Да, в частности это раздражает. И программистов разражает, что я пытаюсь загрузить их лишней тупой работой, и я бы предпочла вообще обойтись без них, так как это вообще очевидное рутинное действие, которое должно определяться декларативно, а не триггерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 22:01 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Yulka авторYulka Опять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО 1. Таблица вообще не множество 2. Пример: поток событий - могут отличаються только порядковым номером, т.е. номером строки таблицы. Если Вам множества не нужны, то не используйте их, всему свое место. А поток событий, отличающихся только порядковым номером (если он не значимый, конечно, этот порядок, потому как порядок может быть только на множестве, например, это порядок во времени возникновения, то уже может понадобиться в качестве множества), - это, действительно, не множество. Я бы для таких объектов использовала другие механизмы. В задачах БД, мы оперируем не таблицами, а выборками из них, поэтому образуют записи таблицы множество или нет, вопрос второстепенный (уникальность скорее позволяет оптимизировать работу). Выборка из таблицы, в которой есть PK может не быть множеством (будет содержать повторяющиеся записи) и наоборот выборку из таблицы в которой нет PK легко превратить в множество, если включить в неё псевдоколонку с системным ID записи (rowid) или агрегировать дубликаты. Что касается потоков асинхронных событий, то есть несколько аспектов обеспечения их уникальности. Можно их нумеровать из общего счётчика (получаем суррогатный ключ), что приведёт к ухудшению масштабируемости системы из-за конкуренции за общий ресурс. Кроме того, из-за изоляции транзакций БД, мы время от времени будем обраруживать пропуски в порядковых номерах событий, которые при следующих обращениях по мере завершения конкурирующих транзакций могут заполняться. Можно при обнаружении дублирования обновлять счётчик повторений в уже существующей записи (так например работает очередь событий перемещения мыши в Windows), что опять же ухудшит масштабируемость, но отпадёт надобность расходовать номера, сократится размер таблицы и позволит создать живой PK. Наконец можно просто добавлять записи в таблицу без всякого PK, и частично упорядочивать их в процессе постобработки (назначать очередной порции новых записей порядковый номер запуска процедуры). Такой подход применяется в сиситемах с высокими требованиями к производительности и масштабируемости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 22:25 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Yulka mcureenabА кто гарантирует уникальность? Кто мешает назначить записи суррогатный ключ, который уже есть в таблице? Кто мешает назначить записи уникальный ключ, который уже есть в таблице? Исключить двойную проверку можно только при наличии взаимнооднозначного преобразования суррогатного первичного ключа в уникальный и наоборот и это преобразование должно находиться за пределами самой таблицы. Нет, тут Вы совершенно правы, но я не предлагала не проверять, я предлагала проверять одновременно, а не каждый по отдельности. Может, неточно выразилась :-( Одновременно или поотдельности, нет разницы. Если объявлены ограничения уникальности, то современные СУБД для каждого такого ограничения строят индекс, а индексы по любому надо актуализировать когда индексированная запись изменяется. Поэтому обнаружение дубля становится маленькой проверкой в большом потоке работы. С другой стороны искать дубли без индекса будет ещё дольше. И вообще, что значит "одновременно"? Я так понял, что если один ключ уникален, то второй можно не проверять. Или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 22:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaДа, в частности это раздражает. И программистов разражает, что я пытаюсь загрузить их лишней тупой работой, и я бы предпочла вообще обойтись без них, так как это вообще очевидное рутинное действие, которое должно определяться декларативно, а не триггерами. Разработка декларативного ограничений практически ничем не отличается от создания триггера. В обеих случаях мы получаем скрипт состоящий из DDL операторов, которые создают в словаре БД соответствующие записи и запускают процессы проверки данных. Для выполнения рутинных действий компьютерная наука придумала подпрограммы (subroutine), которые будучи написаны однажды могут многократно использоваться для решения рутинных задач, в том числе задач администрирования БД. Не вижу проблемы напрячь програмиистов на создание таких подпрограмм. Как программист скажу, что они будут рады поменьше общаться с Вами на скучные и однообразные производственные темы. Лично меня напрягали регулярные обращения администратора и пользователей сделать ту или иную работу. В ответ я делал программу, с помошью которой они могли сами решать свои задачи, а не общаться со злым и противным мной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 22:50 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Yulka mcureenabА кто гарантирует уникальность? Кто мешает назначить записи суррогатный ключ, который уже есть в таблице? Кто мешает назначить записи уникальный ключ, который уже есть в таблице? Исключить двойную проверку можно только при наличии взаимнооднозначного преобразования суррогатного первичного ключа в уникальный и наоборот и это преобразование должно находиться за пределами самой таблицы. Нет, тут Вы совершенно правы, но я не предлагала не проверять, я предлагала проверять одновременно, а не каждый по отдельности. Может, неточно выразилась :-( Одновременно или поотдельности, нет разницы. Если объявлены ограничения уникальности, то современные СУБД для каждого такого ограничения строят индекс, а индексы по любому надо актуализировать когда индексированная запись изменяется. Поэтому обнаружение дубля становится маленькой проверкой в большом потоке работы. С другой стороны искать дубли без индекса будет ещё дольше. И вообще, что значит "одновременно"? Я так понял, что если один ключ уникален, то второй можно не проверять. Или я ошибаюсь? Действительно, что-то не о том. Речь об оптимизации проверки, и делают ли ее СУБД. Отвлечемся от РК, пусть просто в таблице есть две группы уникальных индексов с живой изменчивостью. Чтобы проверить уникальность одного, мне надо перелопатить все записи (про внешние молчу). Я думаю, что одноврменно при этом проверяются и другие уникальные индексы (без дополнительного перелопачивая). Или это не так и проверка по следующему идет заново? Тут обсуждать нечего, тут ответ да-нет предполагается :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 23:14 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Хочу еще добавить на свежую голову вот что. Даже если научиться идентифицировать любую сущность в БД по одному идентификатору, это никак не поможет с часто встречающейся задачей отобразить эту сущность в интерфейсе (в смысле, найти, перейти к ней для просмотра/редактирования). Потому что придется по идентификатору решать задачу вида "а где сущность XXXXXXX отображать?". Вот для этих целей как раз и проще иметь отдельную "часть идентификатора", на которую в простом случае подойдет и имя таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 09:35 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34372320&tid=1544689]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
90ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 483ms |

| 0 / 0 |
