|
|
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Использование комбинации внешних ключей в качестве первичного какие-нибудь грабли может повлечь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 08:43 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
если на него кто-нибудь будет ссылаться,то вряд ли надо.но если это классическая табличка,раскрывающая m:n между сущностями и на нее никто не будет ссылаться-почему бы и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 08:57 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
На него будут ссылаться другие таблицы, причем ссылающимся потребуются, как атрибуты записи с составным ключом, так и атрибуты записей на которые ссылается запись с составным ключом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ЛебедкинИспользование комбинации внешних ключей в качестве первичного какие-нибудь грабли может повлечь? Если значение хотя бы одного поля среди этих внешних может меняться - гарантированные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Грабли - возможное изменение мигрировавшего ключа в первоисточнике и необходимость это изменение провести по цепочкам мигрирования. Мелкие неприятности - более длинные запросы. Если ключевые данные родительских таблиц по определению не меняются после создания детальных записей или скажем записи детальных таблиц пересоздаются при изменении родителей, то преимущества могут перевесить грабли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:40 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Поясню на примере, схема такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Или лучше у таблицы3 создать, как первичный ключ id3 и ссылаться из остальных таблиц на него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:48 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ЛебедкинНа него будут ссылаться другие таблицы, причем ссылающимся потребуются, как атрибуты записи с составным ключом, так и атрибуты записей на которые ссылается запись с составным ключом. Тогда в большинстве случаев лучше завести отдельный суррогатный ключ и ссылаться на него, а на комбинацию внешних наложить ограничение уникальности. Ссылка на такой вот "составной ключ из внешних ключей" довольно неудобна в запросах, как сама по себе (писать join по двум-трем-четырем полям вместо одного), так и особенно тем, что проблема склонна нарастать снежным комом, атрибуты мигрируют во все новые таблицы, их везде надо заполнять, ключи становятся все более и более составными, начинают занимать уйму места.... Преимущества такого ключа - в денормализации. Скажем, дочерняя таблица в запросе может вязаться к "дедушке" минуя родителя - по части ключа, являющейся ключом в дедушке. По той же причине оказывается возможным реализовать constraint-ами некоторые проверки целостности - скажем, я люблю приводить пример таблица <- колонки таблицы таблица <- отчет отчет <- колонки отчета колонки таблицы <- колонки отчета Такая вот "ромбовидная связь" со смыслом "отчет строится над таблицей, колонки отчета опираются на колонки таблицы". При использовании суррогатных ключей потребуется писать триггер, который будет проверять, что колонки отчета не ссылаются на колонки из какой-либо другой (не-отчетной) таблицы. При использовании же составных ключей это гарантируется внешними ключами (миграцией ключа таблицы через отчет и через колонки таблицы в колонки отчета). Итого, подход в некоторых случаях допустимый, но нуждающийся в тщательном продумывании. Я полагаю, его основная область применимости именно в подобного рода метаинформации - малый объем данных, но сложные, запутанные ссылки между описываемым объектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:51 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRГрабли - возможное изменение мигрировавшего ключа в первоисточнике и необходимость это изменение провести по цепочкам мигрирования. Мелкие неприятности - более длинные запросы. Если ключевые данные родительских таблиц по определению не меняются после создания детальных записей или скажем записи детальных таблиц пересоздаются при изменении родителей, то преимущества могут перевесить грабли. Т.к. ключи в исходных таблицах – суррогатные, по определению они меняться не могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:51 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Лебедкин ModelRГрабли - возможное изменение мигрировавшего ключа в первоисточнике и необходимость это изменение провести по цепочкам мигрирования. Мелкие неприятности - более длинные запросы. Если ключевые данные родительских таблиц по определению не меняются после создания детальных записей или скажем записи детальных таблиц пересоздаются при изменении родителей, то преимущества могут перевесить грабли. Т.к. ключи в исходных таблицах – суррогатные, по определению они меняться не могут. А их комбинация может измениться? (Т.е. собственно значения в самом кортеже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 10:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat А их комбинация может измениться? (Т.е. собственно значения в самом кортеже) Нет – записи могут только добавляться, причем не более одной на каждую уникальную комбинацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 10:25 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
To: softwarer: Спасибо за исчерпывающий ответ Все плюсы и минусы понятны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 10:27 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerПреимущества такого ключа - в денормализации.Не понял, какое отношение имеет составной ключ к денормализации. Где и какая нормальная форма нарушается ? Можете пояснить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:08 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA softwarerПреимущества такого ключа - в денормализации.Не понял, какое отношение имеет составной ключ к денормализации. Где и какая нормальная форма нарушается ? Можете пояснить ? Насколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:34 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. А вот и не помните: BCNF - нормальная форма Бойса-Кодда . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:37 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Из этого следует в общем случае, что если в справочник нельзя вводить более одной записи с одним кодом (уникальность по коду), то в нем не может быть никакого другого первичного ключа, в том числе суррогатного, то есть, на такие справочники ссылка всегда должна быть по ЕК, а не по СК. Бред-с? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Из этого следует в общем случае, что если в справочник нельзя вводить более одной записи с одним кодом (уникальность по коду), то в нем не может быть никакого другого первичного ключа, в том числе суррогатного, то есть, на такие справочники ссылка всегда должна быть по ЕК, а не по СК. Бред-с? Сдаюсь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:45 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat Сергей Васкецов MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Из этого следует в общем случае, что если в справочник нельзя вводить более одной записи с одним кодом (уникальность по коду), то в нем не может быть никакого другого первичного ключа, в том числе суррогатного, то есть, на такие справочники ссылка всегда должна быть по ЕК, а не по СК. Бред-с? Сдаюсь! Ваще, спасибо, что вправили мозги, ибо всегда думала, что до BCNF не дотягиваю. Именно потому, что практически везде ввожу суррогатный ключ, привычка и весьма неплохая. имхо. Ибо в 90% оказывается , что даже на связь ММ рано или поздно возникает необходимость сослаться. Век живи, век учись, дураком помрешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 14:52 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Вне зависимости от того, требует или нет, требование совершенно идиотское. Скажем, что делать с таблицей Люди (имя, номер_паспорта, инн)? Пилить на две? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 20:33 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA softwarerПреимущества такого ключа - в денормализации.Не понял, какое отношение имеет составной ключ к денормализации. Где и какая нормальная форма нарушается ? Можете пояснить ? Нарушается принцип один факт - одна запись. Запись в table3 - это факт связи записей table1 и table2. Если в table4 создать запись со ссылкой на table3, тот же самый факт связи записей table1 и table2 будет отражён в БД ещё раз. В итоге мы получаем аномалию обновления. Изменяя или удаляя запись из table3 мы хотим разорвать нашу связь, но она сохраняется в table4 и только ограничения ссылочной целостности БД могут нас остановить. В общем случае для изменения записи в table3 придётся каскадом обновить множество других записей, что неудобно и чревато нарушением целостности. Если функция каскадного обновления поддержана в СУБД, или обновлять записи в table3 вообще не требуется, особых проблем не возникает, и даже можно получить некоторые преимущества - исключить table3 из запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 21:13 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAНе понял, какое отношение имеет составной ключ к денормализации. Где и какая нормальная форма нарушается ? Зависит от. Скажем, в приведенном мной примере подразумевается нарушение второй. Быть может я неправ, но по моим ощущениям, термин "денормализация" сейчас означает нечто большее, нежели "нарушение нормальных форм", которые, при всей их полезности, избавляют не от всех возможных некорректностей. Скажем, давайте рассмотрим таблицы из моего примера: Код: plaintext 1. 2. 3. Что касается table#, с ним все понятно - самый обычный автоинкрементный ключ. Интерес представляют колонки report# и table_column#. У нас есть выбор: 1. Сделать их уникальными (то есть потенциальными ключами), опять же обычный автоинкремент. 2. Сделать их уникальными в пределах #table, но не гарантируя уникальность вообще. Полагаю, очевидно, что первое решение "гарантированно не хуже" второго. Гарантированно - в том плане, что это "второе плюс дополнительное требование", а следовательно, любая аномалия, допускаемая первым, допускается и во втором итп. Короче говоря, множество недостатков первого подхода содержится во множестве недостатков второго подхода. Мало того, легко назвать, чем первых подход лучше, то есть включение строгое, множества не равны. Однако! Однако, второй подход строго соблюдает нормальные формы, в то время как первый - нарушает. По этой причине мне кажется правильным рассматривать фактическую ситуацию, не переоценивая формальные критерии соответствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 21:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Вне зависимости от того, требует или нет, требование совершенно идиотское. Скажем, что делать с таблицей Люди (имя, номер_паспорта, инн)? Пилить на две? Пилить. На "Паспорта" и "Свидетельства о постановке на учёт в налоговой". Создать таблицу связей (номер_паспорта, инн), которая будет говорить, что эти документы принадлежат одному лицу. Поскольку в примере только одна из таблиц (например "Паспорта") будет содержать имя, другую таблицу, которая состоит только из первичного ключа (попросту определяет домен), можно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 21:20 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab softwarer MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Вне зависимости от того, требует или нет, требование совершенно идиотское. Скажем, что делать с таблицей Люди (имя, номер_паспорта, инн)? Пилить на две? Пилить. На "Паспорта" и "Свидетельства о постановке на учёт в налоговой". Создать таблицу связей (номер_паспорта, инн), которая будет говорить, что эти документы принадлежат одному лицу. Поскольку в примере только одна из таблиц (например "Паспорта") будет содержать имя, другую таблицу, которая состоит только из первичного ключа (попросту определяет домен), можно удалить. Пилите дальше, Шура! Паспорта тоже меняют, как минимум 2 или 3 раза... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 22:06 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabПилить. На "Паспорта" и "Свидетельства о постановке на учёт в налоговой". И зачем? Чтобы скучно не было? Сахават ЮсифовПаспорта тоже меняют, как минимум 2 или 3 раза... :) Вот только постановка задачи не говорит, что информация о предыдущих паспортах хоть кому-нибудь интересна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 22:13 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов mcureenab softwarer MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Вне зависимости от того, требует или нет, требование совершенно идиотское. Скажем, что делать с таблицей Люди (имя, номер_паспорта, инн)? Пилить на две? Пилить. На "Паспорта" и "Свидетельства о постановке на учёт в налоговой". Создать таблицу связей (номер_паспорта, инн), которая будет говорить, что эти документы принадлежат одному лицу. Поскольку в примере только одна из таблиц (например "Паспорта") будет содержать имя, другую таблицу, которая состоит только из первичного ключа (попросту определяет домен), можно удалить. Пилите дальше, Шура! Паспорта тоже меняют, как минимум 2 или 3 раза... :) Дальше не видно куда пилить. Примерчик маловат. Однако, при смене паспорта можно просто создать новую запись в таблице связей, при смене ИНН следующую и так проследить чела до тех пор, пока он не поменяет все документы разом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 22:19 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerОднако, второй подход строго соблюдает нормальные формы, в то время как первый - нарушает. Не надо включать(мысленно) суррогатный ключ в состав полей таблицы: и овцы сыты и волки целы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 09:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabНарушается принцип один факт - одна запись.Очень вольная интерпретация нормализации, IMHO. mcureenabЗапись в table3 - это факт связи записей table1 и table2. Если в table4 создать запись со ссылкой на table3, тот же самый факт связи записей table1 и table2 будет отражён в БД ещё раз.Логика понятна, но предпосылка неверна по причине вышеупомянутой вольности трактовки. Понятие нормализации применимо к конкретной таблице, а не к связям между ними. Нет понятия НФ для БД, они есть только для таблиц. По сути, вы проверяте, удовлетворяет ли множество атрибутов некоторой таблицы той или иной НФ. Если не удовлетворяют, то можно применить определенные усилия для того, чтобы достигнуть следующей степени нормализации, хотя можно и не применять. Если решили не применять, то так тому и быть, и все последствия в виде появления аномалий, избыточности или нарушения целостности данных будете расхлебывать по мере поступления оных. В противном случае, если принято решения о повышение степени нормализации исходной таблицы, то вы осмысленно разделяете множества атрибутов исходной таблицы на несколько подмножеств, добиваясь при этом снижения возможности появления различных несуразностей в хранимых данных. При этом, разумеется, между получившимися таблицами появляются некие логические связи, но сами по себе они никакого отношения к нормализации не имеют. Они лишь следствие расщепления, и если подобная связь между данными разных таблиц обеспечивается не одним, а несколькими полями, то так тому и быть. Конечно, Вы можете добавить суррогатный ключ и считать, что связь по одному полю более нормализована, чем если бы она осуществлялась по нескольким полям. Но исходя из вышесказанного, к нормализации это не имеет ни малейшего отношения и применяется только для решения конкретных практических целей, часть из которых упомянул softwarer. Теоретически же, скорее наоборот, при таком подходе вы добавляете в свою модель избыточную информацию, смысл которой полностью отсутствует в предметной области. mcureenabВ итоге мы получаем аномалию обновления.В классическом смысле, насколько мне известно, аномалия обновления возникает в том случае, когда в таблице есть неключевые атрибуты, зависящие друг от друга. Поэтому, обновив лишь один из этих атрибутов, мы можем получить несогласованную информацию. И каскадные обновления не имеют к этому никакого отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават Юсифов mcureenab softwarer MaryCatНасколько помнится, нормальная форма Бойса-Кодда требует, чтобы в таблице был только один потенциальный первичный ключ. Т.е. строку в таблице можно было идентифицировать единственным способом. Вне зависимости от того, требует или нет, требование совершенно идиотское. Скажем, что делать с таблицей Люди (имя, номер_паспорта, инн)? Пилить на две? Пилить. На "Паспорта" и "Свидетельства о постановке на учёт в налоговой". Создать таблицу связей (номер_паспорта, инн), которая будет говорить, что эти документы принадлежат одному лицу. Поскольку в примере только одна из таблиц (например "Паспорта") будет содержать имя, другую таблицу, которая состоит только из первичного ключа (попросту определяет домен), можно удалить. Пилите дальше, Шура! Паспорта тоже меняют, как минимум 2 или 3 раза... :) Дальше не видно куда пилить. Примерчик маловат. Однако, при смене паспорта можно просто создать новую запись в таблице связей, при смене ИНН следующую и так проследить чела до тех пор, пока он не поменяет все документы разом. И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:21 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:31 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. А можно ли вообще чего то идетифицировать по его свойствам? Ведь они переходящи? Вчераший MaryCat осталась в "вчера". Связь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов MaryCat Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. А можно ли вообще чего то идетифицировать по его свойствам? Ведь они переходящи? Вчераший MaryCat осталась в "вчера". Связь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :( Да считаю что можно. Например техническую аппаратуру по серийному номеру производителя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:50 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat Сахават Юсифов MaryCat Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. А можно ли вообще чего то идетифицировать по его свойствам? Ведь они переходящи? Вчераший MaryCat осталась в "вчера". Связь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :( Да считаю что можно. Например техническую аппаратуру по серийному номеру производителя да. и еще штрихкод. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:53 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat Сахават Юсифов MaryCat Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. А можно ли вообще чего то идетифицировать по его свойствам? Ведь они переходящи? Вчераший MaryCat осталась в "вчера". Связь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :( Да считаю что можно. Например техническую аппаратуру по серийному номеру производителя Серийный номер. :) А какое отношение это имеет к аппаратуре? Она что без нее не может работать? Суррогат чистой воды. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:53 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов MaryCat Сахават Юсифов MaryCat Сахават Юсифов И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Да. Это весьма сложный вопрос. Мы в свое время пытались идентифицировать по совокупности аттрибутов. Но паспорт - это идентификатор человека только на период времени. А можно ли вообще чего то идетифицировать по его свойствам? Ведь они переходящи? Вчераший MaryCat осталась в "вчера". Связь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :( Да считаю что можно. Например техническую аппаратуру по серийному номеру производителя Серийный номер. :) А какое отношение это имеет к аппаратуре? Она что без нее не может работать? Суррогат чистой воды. :) ДНК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:55 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовСвязь естественно идентифицирующая объекта через множества его состояний внешняя, независимая от объекта и его состояний. А называют ее почему то - суррогатной. :(? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:59 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовИ кто у нас теперь ЧЕЛ? Как мы его идентифицируем? А чела нету вообще. Чел по природе своей однозначно не идентифицируем. Иначе не нужно было бы придумывать удостоверения личности и прочие бумажки, без которых, как говориться, чел - букашка. С таблицей Люди может возникнуть проблема на этапе реализации. PK, должен быть not null. Если PK - номер паспорта, то мы не сможем завести в систему чела, у которого нет паспорта, даже если у него есть ИНН. И наоборот. Если PK - ИНН, то без него невозможно завести чела с паспортом. Может быть в данном конкретном случае оно так и надо, но как то здравый смысл подсказывает, что это не нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:02 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовИ кто у нас теперь ЧЕЛ? Как мы его идентифицируем? А чела нету вообще. Чел по природе своей однозначно не идентифицируем. Иначе не нужно было бы придумывать удостоверения личности и прочие бумажки, без которых, как говориться, чел - букашка. С таблицей Люди может возникнуть проблема на этапе реализации. PK, должен быть not null. Если PK - номер паспорта, то мы не сможем завести в систему чела, у которого нет паспорта, даже если у него есть ИНН. И наоборот. Если PK - ИНН, то без него невозможно завести чела с паспортом. Может быть в данном конкретном случае оно так и надо, но как то здравый смысл подсказывает, что это не нормально. По природе идентифицируем, только мы этими данными не владеем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:05 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
> И кто у нас теперь ЧЕЛ? Как мы его идентифицируем? Вы не Господь Б-г, у Вас задача попроще: регистрировать свойства или совокупность свойств человека или атрибуты его ролей. Наиболее распространенная задача - регистрации гражданина государства. И она ничего общего с идентификацией человека не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:09 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовИ кто у нас теперь ЧЕЛ? Как мы его идентифицируем? А чела нету вообще. Чел по природе своей однозначно не идентифицируем. Иначе не нужно было бы придумывать удостоверения личности и прочие бумажки физика думаит как раз наоборот. идентифицируемо то, на что можно наклеить бумашку. а вот некоего выделенного электрона или фотона - поросту нет. Есть только состояния электрона или фотона (т.е. состояния того, чего отдельно взятого и конкретного в природе нет).придумать же удостоверение электрона - низзя. кстати, ваш квантовый чел - он бозе-чел или ферми-чел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:11 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
>ДНК Два образца ДНК совпали. Но почему мы уверены, что контрольный образец взят у нужного человека? Как мы его идентифицировали? В сущности, вся информация (имена, номера, слова, буквы) - суррогаты, имеющие смысл лишь в пределах определенной памяти, в пределе - памяти человечества. Во как:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:13 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовА можно ли вообще чего то идетифицировать по его свойствам? Можно, но не нужно. Идентифицировать объект надо сразу при его создании и навсегда, независимо от его свойств и истории их изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:15 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelR>ДНКблизнецы. клоны. не выход. чел - есть совокупность _всех_ своих св-в. а не только ДНК. в любой модели перебирается ограниченное (возможно - не наперед) кол-во св-в. Посему для идентификации модельного чела чаще применяется не эта совокупность, а сама идея уникальности, воплощенная в суррогате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:19 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelR>ДНК Два образца ДНК совпали. Но почему мы уверены, что контрольный образец взят у нужного человека? Как мы его идентифицировали? В сущности, вся информация (имена, номера, слова, буквы) - суррогаты, имеющие смысл лишь в пределах определенной памяти, в пределе - памяти человечества. Во как:) Не... это не серьезно уже. Тогда верить в принципе нельзя никому и ничему. Давайте основываться на том, что сохранены данные верно, т.е. БД содержит корректную информацию. Если это исключать, то разговор совсем ни о чем :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:19 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
4321 ModelR>ДНКблизнецы. клоны. не выход. чел - есть совокупность _всех_ своих св-в. а не только ДНК.. Про клонов я не подумала. Но мы же таки находимся в реальном мире и можем опираться на некие аксиомы. 4321 в любой модели перебирается ограниченное (возможно - не наперед) кол-во св-в. Посему для идентификации модельного чела чаще применяется не эта совокупность, а сама идея уникальности, воплощенная в суррогате. Согласна. Набор свойств, это как раз то, что может идентифицировать объект в реальном мире, кроме суррогатного ключа нашей системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:22 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCatДНК Во первых слишком дорого. Во вторых, если не ошибаюсь, ДНК тоже может повторяться, например у однояйцевых близнецов. Идентификация людей, это очень специальная задача, которой занимаются соответствующие органы (милиция, паспортный контроль на таможне, контролёр в банке и т.п.). В коммерческих приложениях проще доверять документам (всякоразным удостоверениям личности) и оператору, который их принимает и сверяет с предъявителем. Если нам нужно убедиться, что предъявитель паспорта 1 и предъявитель паспорта 2 - одно лицо, придётся использовать методы корелляции данных, привлекать дополнительные сведения, такие как водительское удостоверение, ИНН, загран-паспорт, свидетелей. И только после этого установить в БД связь между паспортом 1 и паспортом 2. Не даром в банках для получения кредита требуют два удостоверения личности, ведь поменять сразу два документа значительно сложнее, чем один. В случае ошибки мы дадим кредит мошеннику или откажем честному человеку. В системах, где вопросы безопасности не так важны, достаточно оперировать теми документами, которые предъявил чел и не думать о самом челе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:24 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat ModelR>ДНК Два образца ДНК совпали. Но почему мы уверены, что контрольный образец взят у нужного человека? Как мы его идентифицировали? В сущности, вся информация (имена, номера, слова, буквы) - суррогаты, имеющие смысл лишь в пределах определенной памяти, в пределе - памяти человечества. Во как:) Не... это не серьезно уже. Тогда верить в принципе нельзя никому и ничему. Давайте основываться на том, что сохранены данные верно, т.е. БД содержит корректную информацию. Если это исключать, то разговор совсем ни о чем :/ Я же не про это. Я про то что не надоть ничего нормализовать, опеспечивать ссылочную и т.д. целостность, разбирать какие - то эфемерные сущности, естественные ключи и т.д.. Как сказал "мод" - родился? В лоб тебе GUID. Принудительная межсистемная идентификация. А атрибуты, свойства и т.д., на этого козла каждый повесить свой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:27 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab MaryCatДНК Во первых слишком дорого. Во вторых, если не ошибаюсь, ДНК тоже может повторяться, например у однояйцевых близнецов. Идентификация людей, это очень специальная задача, которой занимаются соответствующие органы (милиция, паспортный контроль на таможне, контролёр в банке и т.п.). В коммерческих приложениях проще доверять документам (всякоразным удостоверениям личности) и оператору, который их принимает и сверяет с предъявителем. Если нам нужно убедиться, что предъявитель паспорта 1 и предъявитель паспорта 2 - одно лицо, придётся использовать методы корелляции данных, привлекать дополнительные сведения, такие как водительское удостоверение, ИНН, загран-паспорт, свидетелей. И только после этого установить в БД связь между паспортом 1 и паспортом 2. Не даром в банках для получения кредита требуют два удостоверения личности, ведь поменять сразу два документа значительно сложнее, чем один. В случае ошибки мы дадим кредит мошеннику или откажем честному человеку. В системах, где вопросы безопасности не так важны, достаточно оперировать теми документами, которые предъявил чел и не думать о самом челе. Да. Действительно оттого и отмечала выше, что мы в своей системе расссматривали варианты идентификации (в том числе и набор атрибутов), прежде, чем признать, что у нас такой чел не проходил и зарегистрирован не был. Разумеется с некой вероятностью ошибки, но все же максимально пытались ее избежать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:29 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
MaryCat Про клонов я не подумала. Но мы же таки находимся в реальном мире и можем опираться на некие аксиомы.близнецы реальны. MaryCat Согласна. Набор свойств, это как раз то, что может идентифицировать объект в реальном мире, кроме суррогатного ключа нашей системыидентификация в "реальном" мире как раз отличается возможностью наклеить (дополнительный) ярлык при нехватке взятых в рассмотрение св-в. (сделать засечку, поставить номер на бильярдном шаре и т.п.). Т.е. расширить (принимаемый во внимание) набор св-в при его недостаточности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:31 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
4321физика думаит как раз наоборот. идентифицируемо то, на что можно наклеить бумашку. Тогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект. Для надёжности, на объект можно прилепить несколько разных бумажек, используя разные липучки. И ещё записать характеристики объекта, которые сами по себе не являются уникальными, но при необходимости с большой долей вероятности позволят исключить из рассмотрения липовые бумажки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:37 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab 4321физика думаит как раз наоборот. идентифицируемо то, на что можно наклеить бумашку. Тогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект. Для надёжности, на объект можно прилепить несколько разных бумажек, используя разные липучки. И ещё записать характеристики объекта, которые сами по себе не являются уникальными, но при необходимости с большой долей вероятности позволят исключить из рассмотрения липовые бумажки. Ребята, с вами весело! :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabТогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект.физика считает объекты идентифицируемыми, если они без сторонней помощи или наблюдаемых манипуляций не обмениваются (к примеру) бумажками. Для идентифицируемости в этом смысле требуется не вера, а принципиальная возможность проследить. у электронов же, если я не совсем осклерозел, всегда будет наблюдаться т.н. "обменное взаимодействие" - порождаемое принципиальной невозможностью проследить кто из них - кто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:45 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerБыть может я неправ, но по моим ощущениям, термин "денормализация" сейчас означает нечто большее, нежели "нарушение нормальных форм", которые, при всей их полезности, избавляют не от всех возможных некорректностей.Какой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ? softwarerСкажем, давайте рассмотрим таблицы из моего примера: Код: plaintext 1. 2. 3. Что касается table#, с ним все понятно - самый обычный автоинкрементный ключ. Интерес представляют колонки report# и table_column#. У нас есть выбор: 1. Сделать их уникальными (то есть потенциальными ключами), опять же обычный автоинкремент. 2. Сделать их уникальными в пределах #table, но не гарантируя уникальность вообще. Полагаю, очевидно, что первое решение "гарантированно не хуже" второго. Гарантированно - в том плане, что это "второе плюс дополнительное требование", а следовательно, любая аномалия, допускаемая первым, допускается и во втором итп. Короче говоря, множество недостатков первого подхода содержится во множестве недостатков второго подхода. Мало того, легко назвать, чем первых подход лучше, то есть включение строгое, множества не равны. Однако! Однако, второй подход строго соблюдает нормальные формы, в то время как первый - нарушает.В меру моего понимания данного примера. Гарантировано хуже. Сначала о поле table_column# . По первому способу оно становится независимым от table# и, соответственно, поле table# исключается из состава ключа (хотя и может входить в состав суперключа, но это пока неважно в данном случае). Таким образом может возникнуть нарушение целостности данных, т.е., в таблице report_columns может нарушиться соответствие между значениями полями table_column# и table# . Если же сделать по второму способу, то такая ситуация возникнуть уже не может, именно благодаря составному ключу. Аналогично в случае поля report# . Если Вы его объявляете независимым и ключом, то в таблице report_columns может возникнуть казус, подобный вышеупомянутому, несоответствие значений полей report# и table# . Причиной всего этого безобразия стало наличие неявных зависимостей между полями, включенными в таблицу report_columns . Так что если мы хотим воспользоваться уникальностью(суррогатностью) полей table_column# и report# без появления аномалий, то придется приложить некоторые усилия и, в первую очередь, исключить из нее поле table# . Впрочем, это только полумера, IMHO, стоило бы начать проектирование сначала. softwarerПо этой причине мне кажется правильным рассматривать фактическую ситуацию, не переоценивая формальные критерии соответствия.Ваше безусловное право, но в покер я бы с Вами играть не сел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:50 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
4321 mcureenabТогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект.физика считает объекты идентифицируемыми, если они без сторонней помощи или наблюдаемых манипуляций не обмениваются (к примеру) бумажками. Для идентифицируемости в этом смысле требуется не вера, а принципиальная возможность проследить. Принципиальная возможность проследить, это идеализация. В этом смысле человек идентифицируем, но на практике мы не можем проследить за каждым из миллиардов людей, тем более сделать это достоверно. Остаётся только доверять и по возможности проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:03 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод Сахават ЮсифовА можно ли вообще чего то идетифицировать по его свойствам? Можно, но не нужно. Идентифицировать объект надо сразу при его создании и навсегда, независимо от его свойств и истории их изменения.Путаница. Идентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. При этом сравниваются данные базы и внешние данные о свойствах объекта. А то что память (программный объект) однозначно определяется адресом - и найденный адрес можно использовать для ссылок - это ж нечто другое. Мы "верим" этому адресу лишь потому, что он защищен от внешних помех, и будучи однажды вычислен, может использоваться чисто внутри системы (суррогат) или передан и во вне (искусственный ключ). Отсюда ясно, что все поступающие нам естественные ключи - это чьи-то искусственные. Так что авторНе... это не серьезно уже. Тогда верить в принципе нельзя никому и ничему. не так уж не серьезно. Истинно вопрос в доверии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:03 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAКакой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ? Полагаю, смысл в том, чтобы избежать мучительного поиска общепонятного термина со смыслом "денормализация и еще некоторые фокусы с очень похожими результатами". softwarerСкажем, давайте рассмотрим таблицы из моего примера: Код: plaintext 1. 2. 3. [quot ChA]Гарантировано хуже. Сначала о поле table_column# . По первому способу оно становится независимым от table# и, соответственно, поле table# исключается из состава ключа (хотя и может входить в состав суперключа, но это пока неважно в данном случае). Я не понимаю, что такое "ключ и суперключ" в Вашем примере. "Соответственно" - неверно. Никто ниоткуда это поле исключать не будет. В иллюстрации названы именно те колонки, которые будут объявлены первичным ключом соответствующей таблицы. Разница в том, что в первом случае объявляется еще одно, дополнительное ограничение - Код: plaintext ChAТаким образом может возникнуть нарушение целостности данных, ..... Если же сделать по второму способу, то такая ситуация возникнуть уже не может, именно благодаря составному ключу. Надеюсь, я показал, что Ваши рассуждения исходят из неверной предпосылки (вообще, судя по "благодаря составному ключу", Вы полагаете, что я сравниваю простые ключи с составными, чего нет). ChAТак что если мы хотим воспользоваться уникальностью(суррогатностью) полей table_column# и report# без появления аномалий, то придется приложить некоторые усилия и, в первую очередь, исключить из нее поле table# . Если мы исключим поле table# , мы как раз добавим аномалию. Можно будет создать отчет, опирающийся на таблицу А, а в колонках этого отчета ссылаться на колонки, принадлежащие таблице Б. ChAВпрочем, это только полумера, IMHO, стоило бы начать проектирование сначала. Имхо Вы просто совершенно не поняли приведенный пример и начали рассуждать, исходя из совершенно ложных предпосылок о тех объектах, DDL которых я опустил (оговорив его смысл словесно). ChAВаше безусловное право, но в покер я бы с Вами играть не сел. Хм. Не знаю, при чем тут покер, но мне скучно в него играть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:11 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA mcureenabНарушается принцип один факт - одна запись.Очень вольная интерпретация нормализации, IMHO. .... mcureenabВ итоге мы получаем аномалию обновления.В классическом смысле, насколько мне известно, аномалия обновления возникает в том случае, когда в таблице есть неключевые атрибуты, зависящие друг от друга. Поэтому, обновив лишь один из этих атрибутов, мы можем получить несогласованную информацию. И каскадные обновления не имеют к этому никакого отношения. Ok. Ошибку осознал. Действительно, дублирование данных не всегда есть проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:23 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). А где у человека ID? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:22 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). А где у человека ID? например когда АйДи задается по какому либо алгоритму учитывающему, например, имя-фамилию (soundex as var) или по сетчатке глаза или по отпечаткам пальцев... хотя... наверное нет - ведь можно и без глаз остаться или без пальцев... вот расшифруют ДНК и создадут единую базу тогда, пожалуй что... пока еще нет у человека ID и, пожалуй, только это внушает оптимизимь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:31 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabА где у человека ID? На бумажке напечатали, когда его регистрировали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модА если так: найти объект с заданным ID (и никаких тебе "подходящих").Иначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:37 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод mcureenabА где у человека ID? На бумажке напечатали, когда его регистрировали Я себя ощупал. Никакой бумажки не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRИначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять. Ну да, использовать внутренний ИД для внешней идентификации (часто применяется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модНа бумажке напечатали, когда его регистрировали Верим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRВерим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие... То что это вопрос доверия - конечно согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:41 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelR mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите. Да уж куда там... Холодно ведь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:56 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer ChAКакой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ? Полагаю, смысл в том, чтобы избежать мучительного поиска общепонятного термина со смыслом "денормализация и еще некоторые фокусы с очень похожими результатами".Некоторая вольность в обращении с терминами не способствует взаимопониманию. softwarerВы полагаете, что я сравниваю простые ключи с составными, чего нет. Да, именно так и предполагал, так как исходил из фразы softwarerСделать их уникальными (то есть потенциальными ключами)Мне показалось естественным, что таким образом подразумевается противопоставление ключа ( table_column# ) ключу ( table# , table_column# ) при связке таблиц table_columns и report_columns . А иначе какой смысл в таком решении, т.е., дополнительной уникальности поля table_column# ? Фактически, мы таким образом превратили комбинацию ( table# , table_column# ) в суперключ, т.е., ключ, множество атрибутов которого превышает минимально необходимое. В этом случае, мы действительно можем смело употребить термин "денормализация", так как поле table# становится лишним атрибутом для формирования ключа, и становится обычным, не идентифицирующим сущность атрибутом. Соответственно, при связке с таблицей report_columns по, теперь уже, суперключу ( table# , table_column# ) и миграции в оную поля table# оно приведет к той самой денормализации. Но таким путем можно связаться и по суперключу, включающему в себя все атрибуты мастер-таблицы. Собственно это и будет денормализация в чистом виде, но совсем не потому, что составной ключ softwarerПреимущества такого ключа - в денормализации. и денормализация - это близнецы-братья. А ровно потому, что сам суперключ ведет к денормализации, так как он включает в себя атрибуты, не нужные для однозначной идентификации сущности. И то что он составной, роли не играет, другим он в принципе быть и не может. softwarerЕсли мы исключим поле table# , мы как раз добавим аномалию. Можно будет создать отчет, опирающийся на таблицу А, а в колонках этого отчета ссылаться на колонки, принадлежащие таблице Б.Разумеется, именно об этом я и говорил, подразумевая, что ключом является только поле table_column# . Если же связка идет по ( table# , table_column# ), то исключить поле table# не представляется возможным в принципе, так как оно является частью внешнего ключа для таблицы report_columns . Собственно, здесь и так все тривиально, чтобы обсуждать. softwarerИмхо Вы просто совершенно не поняли приведенный пример и начали рассуждать, исходя из совершенно ложных предпосылок о тех объектах, DDL которых я опустил (оговорив его смысл словесно).В нашем с Вами общении это не редкость. А по сути, лучше было 2 строки на DDL, чем пару абзацев пояснений, особенно учитывая некоторую вольность в использовании терминов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:10 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает? как раз такой и не внушает... перечтите внимательнее - собственно это я и и мел в виду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:30 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Клёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:51 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirоказаться от попыток идентификации человека. с определенной (ИМХО достаточной) степенью достоверности можно использовать алгоритм формирования АйДи персоны по сочетанию его ФамилииИмениОтчества - типа Soundex + дата рождения чтобы обойти проблему Русский-Английский можно сначала транслитерировать (можно в бэкграунде - скрыто от пользователя) личные данные с Русского на Английский (алгоритм не то чтобы тривиален, но не сложен ИМХО) и только потом применить для кодирования классический Сандекс... этакий вот квази-суррогатный ключ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:34 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. Отсутствие точного решения не означает, что приближённое решение непригодно для использования в практических задачах. Если это действительно нужно, нет проблем завести таблицу "Чел" с суррогатным ID и всякими атрибутами, типа фотографии, отпечатков пальцев, фактов из биографии, образцом подписи и т.п. свойств принадлежащих непосредственно человеку. Реальный чел может знать свой ID в нашей системе, может не знать, намеренно скрывать или сообщать ложные сведения. Тогда поиск ID придётся выполнять косвенными методами. Например по базе паспортов, свидетельств о постановке на налоговый учёт, фотографиям, отпечаткам пальцев, биографическим сведениям и т.п. Для надёжности можно использовать сразу несколько методов. Не исключено, что один и тот же чел будет зарегистрирован в БД с разными ID. Но тут уж надо блительность проявлять. Регулярно проводить аналитические проверки с целью выявления таких фактов и актуализации сведений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:43 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabРегулярно проводить аналитические проверки с целью Штатники например остро озаботились этой проблемой после 9.11. раньше иностранцу можно было въезжать в ЮСА под новыми именами чуть не каждый раз - как документы на визу подал Куренков - Kurenkov Куренков - Kurenkoff Куренков - Kourenkov и т.д. (и это еще не самая сложная фамилия) теперь бьются над едиными правилами записи - анализируют, проверяют а наши выдают визы транслитерируя с латиницы по единой нотации (французской) (оригинально/пишеццо -- записывается в визе -- читаеццо/произносиццо) Caufield -- Куафиелд -- Кофилд Darwazeh -- Дарвазех -- Дарваже Kustrimovic -- Кустримовик -- Кустримович ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:58 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAДа, именно так и предполагал, так как исходил из фразы softwarerСделать их уникальными (то есть потенциальными ключами)Мне показалось естественным, что таким образом подразумевается противопоставление ключа ( table_column# ) ключу ( table# , table_column# ) Хм. Имхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе. Мне кажется, не имеет смысла обсуждать поотдельности каждую фразу "что как следовало понимать", поэтому позволю себе ответить "по основной теме и в целом". 1. Где подразумевалась денормализация, мы выяснили и вроде как расхождений не имеем. 2. ИМХО описанная денормализация - основной плюс миграции идентифицирующих атрибутов, и это практически единственный вариант, когда составной ключ может оказаться оправданным. Второй вариант - таблица, на которую никто никогда не будет ссылаться, и как следствие, для нее незачем специально вводить простой. 3. "Пару строк DDL" я бы конечно написал. Проблема в том, что их требовалось штук пятнадцать, и приведенные мной четыре основных среди них потерялись бы. Я полагал, что выделив суть, обеспечу лучшее восприятие читателями. Возможно, ошибался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 20:28 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. Причем тут человек. Свойства любого объекта формируются субъектом по своему усмотрению. Если не принудить, то у же при количестве субъектов >= 2 объект имет шанс остаться неидентифицируемым. Потому нужен принудительный идентификатор. В лоб каждому, каленым железом, в три слоя. GUID + PDF417. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 20:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым, и становится суперключом. Мне казалось, что это очевидно. Именно поэтому 2 решения, которые Вы предложили рассмотреть, являются принципиально разными, а не различаются всего лишь добавлением еще одного ограничения в первом из упомянутых. softwarerИМХО описанная денормализация - основной плюс миграции идентифицирующих атрибутов, и это практически единственный вариант, когда составной ключ может оказаться оправданным.Опять не понимаю. Денормализация появляется только при миграции неидентифицирующих атрибутов, т.е., когда связь происходит не по одному из возможных ключей, а по суперключу. Если же связь происходит именно по ключу, пусть даже составному, то никакой денормализации нет. И оправданность с теоретической точки зрения только одна, это естественно, т.е., не требует появления каких-либо избыточных атрибутов типа суррогатных ключей, происходит в рамках стандартной нормализации и не вызывает никаких дополнительных аномалий. Некоторые же из практических плюсов и минусов использования суррогатных ключей, как альтернативы составных, Вы упоминали ранее, и по ним у нас нет разногласий. Хотя я не сторонник бездумного использования суррогатных ключей. А то доходит до смешного. Делают связь "многие-ко-многим" через дополнительную таблицу и помимо добавленных ключей с каждой стороны в нее громоздят еще один суррогатный ключ. Спроси зачем, ответа не скажут или начинают нести откровенный бред. Одним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления, хотя я лично склонен считать, что из неверно понятого условия обязательности ключа в любой таблице. Впрочем, это уже зыбкая почва предположений и не вижу смысла в нее углубляться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 22:02 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым, :)) Признаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ. Вам в данном случае трудно понять меня потому, что Вы думаете о том, "как должно быть с точки зрения теории", а я - о том, "как есть в приведенном мной примере". При этом похоже, расхождений по сути у нас нет, вопрос исключительно в утрясании формулировок. ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления Я бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат. Кроме того, я бы предположил, что существенный вклад внесли всякого рода CASE-ы, фреймворки (не понимающие составных ключей), автогенерируемый код (опять же склонный быть реализованным "тупо и просто") итп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 22:28 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerПризнаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ.Такие понятия действительно отсутствуют, собственно, эти формулировки целиком на Вашей совести. Но условие неизбыточности потенциального ключа упоминается практически во всех изданиях по СУБД, считающихся классическими. По этой причине, по первому решению, комбинация (table#, table_column#) после добавления уникальности на table_column# выходит из категории потенциальных ключей и начинает относиться уже только к категории суперключей. Дейт даже делает специальную оговорку по поводу использования избыточного ключа в качестве внешнего, указывая, что такой подход явно ведет к денормализации, хотя это и так очевидно, чтобы быть поводом для оговорки. Максимальный суперключ, как крайний случай, включает в себя все атрибуты сущности на которой он построен, хотя не исключено, что он при этом останется потенциальным ключом. Впрочем, не вижу смысла мусолить одно и тоже, посему закрываю для себя эту нить обсуждения. Кстати, был не совсем прав, по поводу определения суперключа. Есть немало разночтений этого термина вплоть до абсурдного - эквивалентности понятия "составной ключ" и "суперключ", но заслуживающими внимания, IMHO, можно считать понятия от апологетов или лиц, известных и авторитетных в определенных кругах. По их, в целом, общему мнению, под понятие суперключа подходит любой набор атрибутов, включающий в себя целиком хотя бы один потенциальный ключ. Из этого следует, что вырожденный случай, когда суперключ целиком равен потенциальному ключу также допустим. Впрочем, IMHO, это не принципиально в контексте обсуждаемой темы. В любом смысле, было полезно освежить свои знания. softwarerЯ бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат.Понятие идеала - вещь сугубо субъективная и не может быть использовано в качестве объективного критерия. С моей точки зрения, использование суррогатного ключа только потому, что, например, лень указывать несколько условий вместо одного, или боязнь запутаться, или забыть все условия по составному ключу, выглядит несколько абсурдным. Я могу понять эти причины с практической точки зрения, но при этом надо отдавать себе отчет, что такое решение может сильно усложнить работу СУБД. В частности, когда могла бы происходить (а она будет обязательно) связка или были бы условия (а они будут обязательно) по конкретным атрибутам составного ключа, как естественной альтернативы суррогатному. В этом случае Engine будет вынужден выполнять двойную работу: слияние по суррогатному ключу и слияние или проверка условий по атрибутам, которым было отказано в миграции в связи с заменой их множества на суррогатный ключ, или наоборот, но в любом случае - оба действия. А если у нас будет "вложенность" на несколько уровней с заменой миграции на суррогатность на каждом из них ? Боюсь, что в таком случае "унификация" может оказаться чересчур дорогим удовольствием. Не говоря уж о том, что вместо N естественно мигрирующих атрибутов у нас появляется еще того же порядка суррогатных атрибутов в общей схеме. И в запросах могут появиться уже больше условий, чем если бы мы позволили миграцию составных ключей, так кроме условий на них мы вынуждены включать и условия на суррогатные. В связи с вышеупомянутым, лично для меня, замена составных ключей на суррогатные выглядит не столь привлекательно, чтобы хоть в какой-либо степени считать ее близкой к идеалу. IMHO, единственное оправданное применение суррогатных ключей, заключается только в минимизации физических объемов при замене ими естественных ключей. Попутно же решается проблема с потенциальной изменчивостью естественного ключа, но это, скорее, дополнительный бонус, хотя и очень ценный, иногда только ради него происходит подобная замена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 07:01 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
По поводу разгоревшейся дискуссии (про паспорт и инн, нормализацию и заявление mcureenab "пилить") хочу напомнить еще одно золотое правило: не плодить сущности без нужды . Если нашей системе не ставится задача отслеживать историю получения человеком паспортов, то не надо пилить ... ...А может, в нашей системе для идентификации человека номер паспорта вообще не нужен. Тогда и атрибут такой человеку не нужно заводить. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 07:01 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA softwarer ChA softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым, :)) Признаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ.Такие понятия действительно отсутствуют, собственно, эти формулировки целиком на Вашей совести.Прошу прощения, просмотрел, слово "настоящий" было действительно мною использовано, но, хотелось бы подчеркнуть, что не в качестве термина или понятия, а чтобы донести смысл, так как ряд используемых терминов ранее был признан неизвестным. Так что не вижу смысла в Вашей, несомненно остроумной, реплике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 07:11 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления Я бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат.Будем помнить, что такое автоматически выполняемое и не требующее размышлений правило имеет и свой побочный отрицательный эффект. Многие с младых ногтей привыкают без раздумий сразу заводить для таблицы суррогатный ключ (ID..., Код...) и на этом успокаиваются и даже не пытаются искать наличие других потенциальных ключей. А ведь их обязательно надо объявить UNIQUE. Вот и плодятся базы, где внешне нормальная схема (все таблицы имеют ПК) на поверку оказывается г@вном. Я такого на примере своих студентов насмотрелся. Если его (студента) кто-то сразу научил, что каждой таблице надо заводить суррогатный ключ, -- пиши пропало. Этот горе-проектировщик больше о необходимости определять альтернативные ключи никогда не вспомнит. Я к тому, что если какая-то методика проектирования "не требует размышлений" , то от этого может быть вреда не меньше, чем пользы. Размышления все же нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 11:10 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ВАФЫВАВЫАЫФВА mirоказаться от попыток идентификации человека. с определенной (ИМХО достаточной) степенью достоверности можно использовать алгоритм формирования АйДи персоны по сочетанию его ФамилииИмениОтчества - типа Soundex + дата рождения чтобы обойти проблему Русский-Английский можно сначала транслитерировать (можно в бэкграунде - скрыто от пользователя) личные данные с Русского на Английский (алгоритм не то чтобы тривиален, но не сложен ИМХО) и только потом применить для кодирования классический Сандекс... этакий вот квази-суррогатный ключНикому не нужное и нерабочее решение. Если ФИО+Дата уникальны, никакой "АйДи" уже и не нужен. А если он нужен, то правильным решением будет создать суррогатный ключ-счетчик и GUID. Какой смысл заводить "АйДи" как функцию от других атрибутов? Они же могут меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 11:17 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
В смысле суррогатный ключ -- счетчик или GUID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 11:20 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAС моей точки зрения, использование суррогатного ключа только потому, что, например, лень указывать несколько условий вместо одного, или боязнь запутаться, или забыть все условия по составному ключу, выглядит несколько абсурдным. Я могу понять эти причины с практической точки зрения, но при этом надо отдавать себе отчет, что такое решение может сильно усложнить работу СУБД. На моей практике, при прочих равных, усложняло работу с БД именно отсутствие суррогатного PK. Например, в текущем проекте он практически во всех таблицах есть. Это позволяет(позволило) идентифицировать запись в триггере на изменение при множественном изменении записей, написать единую настраиваемую универсальную функциональность протоколирования на триггерах, реализовать опять же такое же универсальное позаписное разграничение прав доступа, универсальные произвольные дополнительные атрибуты любой записи в БД и многое другое, что нельзя было бы сделать также просто, не будь везде суррогатного PK. В общем, если есть вероятность, что на таблице будет висеть хотя бы один триггер - суррогатный PK создаю без раздумий, альтернативные - как UNIQUE INDEX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 12:12 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов... и многое другое, что нельзя было бы сделать также просто, не будь везде суррогатного PK Собственно, как я и говорил: ".. Кроме того, я бы предположил, что существенный вклад внесли всякого рода CASE-ы, фреймворки (не понимающие составных ключей), автогенерируемый код (опять же склонный быть реализованным "тупо и просто") итп." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 13:17 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirЯ к тому, что если какая-то методика проектирования "не требует размышлений" , то от этого может быть вреда не меньше, чем пользы. Размышления все же нужны. Я с этим абсолютно согласен. Но хватает и сторонников противоположного подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 13:18 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовНа моей практике, при прочих равных, усложняло работу с БД именно отсутствие суррогатного PK...К тому, что сказал softwarer по этому поводу, мне, в целом, добавить нечего. Вы имеете полное право решать проблемы тем способом, который вас устраивает, я лишь подчеркнул минусы, проистекающие из тотального применения суррогатных ключей. Кстати, насколько я понял, то причины, побудившие Вас к активному использованию суррогатных ключей идут вне контекста обсуждаемой темы - отказа от миграции составного ключа в пользу миграции суррогатного. В контексте решения некоторых частных проблем требующих упрощенной идентификации записей посредством введения суррогатных ключей не вижу смысла. Впрочем, не уверен, что нельзя было бы их решить на более раннем этапе проектирования с помощью традиционных подходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 15:27 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA Сергей Васкецов...В контексте решения некоторых частных проблем требующих упрощенной идентификации записей посредством введения суррогатных ключей не вижу смысла...Прошу прощения, в результате правки смысл фразы сильно изменился. 37.5 0 C не очень хороший помошник :( Правильно так: Если решение некоторых частных проблем требует упрощенной идентификации записей посредством введения суррогатных ключей, то не нахожу в этом сильной беды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 15:37 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Ввиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД. «Транзитных» и т.п. ключей бы навводили. Вопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется? Опять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО, дубли только для целей оперирования могут быть. А значит, давно пора суррогатные ключи прошить в подкорку (тут я согласна с «CASE-средствами»), чтобы разработчики занимались только содержанием. И студентов с множествами учить работать, а не с ключами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 19:36 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaВвиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД.Да, в общем, и нет никакой проблемы. Тем более такой, чтобы решать на уровне СУБД. А что такое "миграции неключевых"? Yulka«Транзитных» и т.п. ключей бы навводили.Это что за зверь такой? YulkaВопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?Все нормальные РСУБД для PK автоматически создают UNIQUE INDEX, с помощью которого и проверяется уникальность. "Руками" делать ничего не надо. YulkaОпять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО, дубли только для целей оперирования могут быть.Это абсолютно верно. YulkaА значит, давно пора суррогатные ключи прошить в подкоркуЭто абсолютно неверно. YulkaИ студентов с множествами учить работать, а не с ключами.Это что же за такое противопоставление: множества VS. ключи? Что бы это значило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 09:02 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления Все очень просто - это необходимо вытекает из определения понятия Таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 10:47 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
2 Yulka СУБД работает с множествами - адресуемыми элементами данных. Адресное пространство - множество в силу своего устройства. Все проблемы - во взаимодействии с внешним миром. Например, мы знаем, что люди образуют множество, но не имеем возможности эффективно его представить. Более того если однажды установлена связь человека и записи БД, то нет 100% надежного способа эту связь сохранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 10:54 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaОпять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО 1. Таблица вообще не множество 2. Пример: поток событий - могут отличаються только порядковым номером, т.е. номером строки таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 10:56 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления Все очень просто - это необходимо вытекает из определения понятия Таблица.Процитируйте, пожалуйста, это определение и не забудьте указать источник. Что-то мне подсказывает, что ни Кодд, ни Дейт, ни многие другие апологеты с ним незнакомы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 11:48 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAПроцитируйте, пожалуйста, это определение и не забудьте указать источник. Что-то мне подсказывает, что ни Кодд, ни Дейт, ни многие другие апологеты с ним незнакомы.[/quot] Таблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники . ps поменьше апологетов слушайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:08 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники Здравствуйте, Андрей Леонидович. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:13 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники . ps поменьше апологетов слушайтеПросто какое-то нашествие практиков от сохи... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:13 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники Это в принципе верно, если дополнительно требуется условие идентификации любой записи в таблице по подному полю (см. мои примеры выше), что приводит к замечательному следствию, что любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки. Внутри сервера БД такая идентификация есть всегда, но она в большинстве случаев недоступна для разработчика и может меняться со временем. В общем же случае безотносительно требования идентификации - это принципиальная ошибка в рассуждениях, в таблице вообще-то могут быть даже полностью идентичные записи с точки зрения select * from table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецовчто приводит к замечательному следствию, что любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки. Это не слишком замечательное следствие. Если требуется такое (как правило, для трехзвенок-ормов) то куда удобнее идентифицировать записи без имени таблицы, идентификатором, уникальным в пределах базы (попросту - запитать все таблицы от одного секвенсора). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:27 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Нда, прямо на глазах от утверждения "нет ничего практичней хорошей теории" не остается ни камня на камне. Сергей Васкецовчто любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки. Внутри сервера БД такая идентификация есть всегда, но она в большинстве случаев недоступна для разработчика и может меняться со временем.Возможно не удивлю Вас, но такой идентификатор далеко не всегда представляет собой простое и однозначные число. Сергей ВаскецовВ общем же случае безотносительно требования идентификации - это принципиальная ошибка в рассуждениях, в таблице вообще-то могут быть даже полностью идентичные записи с точки зрения select * from table.И Кодд может смело идти в сад, РМД здесь рядом не стояла. Действительно, если такое поведение позволяет себе то, что сейчас идет под названием РСУБД, то этого, оказывается, уже достаточно, чтобы считать теоретически обоснованным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:36 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Да, и реализации ссылочной целостности на триггерах в приведенных мной примерах выше это тоже не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 09:36 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовДаже если научиться идентифицировать любую сущность в БД по одному идентификатору, это никак не поможет с часто встречающейся задачей отобразить эту сущность в интерфейсе (в смысле, найти, перейти к ней для просмотра/редактирования). Потому что придется по идентификатору решать задачу вида "а где сущность XXXXXXX отображать?". Это просто неверно. Я не сторонник орм-овского подхода, но это не повод отрицать его возможности. В частности, приведенная Вами задача, чуть утрируя, решается в нем одной строчкой: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 10:12 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовДа, и реализации ссылочной целостности на триггерах в приведенных мной примерах выше это тоже не поможет. Хм. Сергей, Вы атакуете позицию, которую я не собираюсь защищать, причем атакуете ее довольно странной логикой - "Она не поможет (хотя и не помешает) решить некоторые задачи". Игнорируя те задачи, решить которые она как раз поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 10:14 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Код: plaintext Вы наверное не поняли мою мысль. Попытаюсь ее донести более подробно. Ибо в приведенном примере Вы могли с тем же успехом оставить только Edit. Это бы все равно ничего не поменяло. Предположим, у меня есть секвенсор, который умеет генерить уникальные идентификаторы (неважно какого типа), и я привязал его ко всем суррогатным PK своих таблиц (опять же неважно какого типа). Теперь у меня возникает, например, такая задача. Для любой записи в любом справочнике уметь задавать произвольные атрибуты и их значения, настраиваемые пользователями (это не внутренняя разработка, потому что там наворотят юзера - мне не интересно, пример - технические параметры номенклатуры и миграция их в картотеку ОС, где они могут меняться со временем и в зависимости от узла ОС). При удалении записи из справочника необходимо каскадно удалять все записи о таких атрибутах (дискутировать насчет целесообразности удаления записей из справочников не собираюсь, это здесь не принципиально, можно заменить "справочник" на "документ" или "проводку", если хочется). Также необходимо обеспечить возможность поиска (в конкретном справочнике и вообще в БД) по таким атрибутам и их значениям (то есть, один и тот же атрибут может использоваться в нескольких справочниках), копирование атрибутов и их значений при копировании сущностей. Так как справочников, документов и прочих сущностей в БД немеряно, создавать на каждую сущность отдельную табличку с атрибутами слишком дорого. Поэтому о DRI забываем. Итак, проблема первая - insert в таблицу attrib_values. В таблице со значениями атрибутов необходимо иметь ссылку на элемент справочника. Предположим, у меня идентификатор записи в справочнике уникален в пределах БД и равен 1. Как проверить в триггере на insert на таблицу attrib_values, что запись с идентификатором 1 вообще есть в БД (в каком-либо справочнике)? Отказаться от контроля ссылочной целостности при вставке? Себе дороже потом разгребать. Проблема вторая - поиск сущностей по атрибуту (или его конкретному значению). Найти все записи об использовании атрибута безотносительно сущности несложно (в attrib_values ищем записи по значению идентификатора атрибута). А вот потом начинается беда. Ну, пусть знаю я, что атрибут используется в сущности с идентификаторами 1, 2 и 150, что это такое, дальше-то куда? Как проверить, хотя бы, корректно ли он используется для этой сущности? И т.п. для каждой задачи в преамбуле моего сообщения. Собственно, проблема здесь одна. Имея набор записей в attrib_values, невозможно только по значению одного поля id_entity, в котором лежит уникальный в пределах БД идентификатор, определить, что это за entity такая, которая идентифицируется этим значением. Вы, видимо, знаете волшебную функцию FindObjectById, которая по значению идентификатора вернет, в какой таблице лежит сущность, которую он идентифицирует. Может, для oracle такая штука для sequence-а действительно есть, таких тонкостей не знаю (но исходя из здравого смысла думаю, что нет такой возможности, ибо пришлось бы хранить всю историю значений, куда они отлетели), но все же тэг src delphi в Вашем сообщении мне подсказывает, что Вы меня неверно поняли. Простой пример: [контрагенты] id info 1 "Иванов" 2 "Петров" 3 "Сидоров" [номенклатура] id info 4 "Ручка" 5 "Ножка" 6 "Таз" attrib_values id_entity id_attrib 4 8 3 8 4 9 5 7 1 8 2 7 (*) 1 9 Как понять, что строка (*) используется для контрагента "Иванов"? Откуда сделать вывод, что сущность надо искать именно в контрагентах? Безусловно, можно сделать идентификатор для id_entity обобщенного вида "номенклатура_4", то есть, заложить возможность определения по его значению (в общем виде) вида сущности, но тогда не вижу принципиального смысла делать глобально уникальный секвенсор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:10 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Простой пример: [контрагенты] id info 1 "Иванов" 2 "Петров" 3 "Сидоров" [номенклатура] id info 4 "Ручка" 5 "Ножка" 6 "Таз" attrib_values id_entity id_attrib 4 8 3 8 4 9 5 7 1 8 2 7 (*) 1 9 Как понять, что строка (*) используется для контрагента "Иванов"? Откуда сделать вывод, что сущность надо искать именно в контрагентах? А зачем делить на "контрагенты", "номенклатура",..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:32 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Опечатка. В предпоследнем абзаце не Иванов, а Петров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:33 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовА зачем делить на "контрагенты", "номенклатура",..? То есть, развивая Вашу мысль, все таблицы в БД "наследуются" от одной таблицы? Ну-ну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Сахават ЮсифовА зачем делить на "контрагенты", "номенклатура",..? То есть, развивая Вашу мысль, все таблицы в БД "наследуются" от одной таблицы? Ну-ну. Ну а зачем тогда уникальный на всю БД идентфикатор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНу а зачем тогда уникальный на всю БД идентфикатор? Это не моя идея. Моя идея - для идентификации любой сущности, которую потребуется идентифицировать, достаточно знать ее идентификатор, уникальный в рамках таблицы (например, identity или sequence), где лежит ее (сущности) заголовок, и имя таблицы (ну или аналог имени таблицы, который навсегда связан с таблицей и исходя из значения которого можно построить требуемые операторы SQL). Глобально уникальный идентификатор (в рамках даже целой БД) мне не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:49 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Сахават ЮсифовНу а зачем тогда уникальный на всю БД идентфикатор? Это не моя идея. Моя идея - для идентификации любой сущности, которую потребуется идентифицировать, достаточно знать ее идентификатор, уникальный в рамках таблицы (например, identity или sequence), где лежит ее (сущности) заголовок, и имя таблицы (ну или аналог имени таблицы, который навсегда связан с таблицей и исходя из значения которого можно построить требуемые операторы SQL). Глобально уникальный идентификатор (в рамках даже целой БД) мне не нужен. Вопросы касаются такой архитетуры. Она эффективно, когда разработчие не имеет возможности классифицировать сущности или их очень много. Валим все на пользователя и успокаивемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:53 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов softwarer Код: plaintext Вы наверное не поняли мою мысль. Попытаюсь ее донести более подробно. Ибо в приведенном примере Вы могли с тем же успехом оставить только Edit. Это бы все равно ничего не поменяло. Мой ответ будет состоять из нескольких тезисов. 1. Я отвечаю Вам на сказанное Вами: "с часто встречающейся задачей отобразить эту сущность в интерфейсе (в смысле, найти, перейти к ней для просмотра/редактирования). Потому что придется по идентификатору решать задачу вида "а где сущность XXXXXXX отображать?"" и только на это. В Вашем "не поняли мысль.... более подробно" об этом вообще нет ни слова, Вы целиком ушли от темы. Cм. http://softwarer.ru/about.html#Topic 2. На то, к чему Вы клоните, я ответил в http://www.sql.ru/forum/actualthread.aspx?tid=402005&pg=6#3867730 и как мне представляется, довольно окончательно. 3. Я не думал, что собеседнику на этом форуме потребуется объяснять, что такое "виртуальный метод" и чем он влияет на "ничего бы не поменяло". 4. Тег {src delphi} в моем сообщении и Ваша реакция на него показывает, что как раз Вы меня совершенно не поняли, либо проигнорировали, например, мои упоминания об ORM. 5. Я не хочу упорно и последовательно рассказывать о достоинствах метода, который мне в целом не мил и не интересен. В то же время меня не радует и.... невнимательно-безалаберное отрицание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:57 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaЕсли Вам множества не нужны, то не используйте их Нужны как области определения и значений табличных функций. YulkaЯ бы для таких объектов использовала другие механизмы. Таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:58 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerМой ответ будет состоять из нескольких тезисов. Возникает ощущение, что Вы не переносите, когда Вам говорят, что Вы неправы. softwarerВ Вашем "не поняли мысль.... более подробно" об этом вообще нет ни слова, Вы целиком ушли от темы. Вот что у меня было написано: "Также необходимо обеспечить возможность поиска (в конкретном справочнике и вообще в БД) по таким атрибутам и их значениям (то есть, один и тот же атрибут может использоваться в нескольких справочниках)". Поиск выполняет человек, он хочет по атрибуту понять "где это", посмотреть на это. Ответ "в сущностях с номерами X,Y,Z" вряд ли устроит кого-то. Если же с формальной точки зрения точно известно, что хочется отобразить, отобразить это труда не представляет, это просто техническая задача. Так что с точки зрения идентификации сущности в БД это полностью равносильные задачи. softwarer 2. На то, к чему Вы клоните, я ответил в http://www.sql.ru/forum/actualthread.aspx?tid=402005&pg=6#3867730 и как мне представляется, довольно окончательно. Это Вам почему так представляется, если я даже не понял суть Вашего ответа, как он относится к тому, что я написал? softwarer 3. Я не думал, что собеседнику на этом форуме потребуется объяснять, что такое "виртуальный метод" и чем он влияет на "ничего бы не поменяло". Пожалуйста, обясните, что-такое "виртуальный метод", например, в рамках триггера или хранимой процедуры. Ибо мне это надо на SQL на уровне сервера. И при чем тут ORM, Вы сами решили, что это именно то, что я имею в виду, или я дал Вам какие-то основания для этого, и даже если Вы правы, что из этого следут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 12:28 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовВозникает ощущение, что Вы не переносите, когда Вам говорят, что Вы неправы. Рассказ о том, чего я не переношу, имеет довольно большие шансы обидеть Вас, и с некоторой вероятностью - незаслуженно. Поэтому предлагаю не углубляться в эту тему. Сергей Васкецов softwarerВ Вашем "не поняли мысль.... более подробно" об этом вообще нет ни слова, Вы целиком ушли от темы. Вот что у меня было написано: "Также необходимо обеспечить возможность поиска (в конкретном справочнике и вообще в БД) Покажите, пожалуйста, где это написано в сообщении /topic/402005&pg=5#3867435, на которое я отвечаю. Что касается Вашей попытки забыть то письмо и увести тему в сторону, то я могу третий раз повторить: это направление мне не интересно и обсуждать его я не собираюсь. Отмечу, что в Ваших рассуждениях есть и другие дырки, но из-за глобального нежелания обсуждать это направления я не буду указывать их; если хотите, считайте эти выкладки безупречными. Сергей ВаскецовЭто Вам почему так представляется, если я даже не понял суть Вашего ответа, как он относится к тому, что я написал? Потому что беседа, в отличие например от драки, нуждается в желании обеих сторон. Я вполне четко написал, что участвовать в этом направлении беседы не собираюсь; и учитывая демонстрируемый Вами уровень владения русским языком, не понять этого Вы не могли, если, конечно, читали ответ. Сергей Васкецов softwarer 3. Я не думал, что собеседнику на этом форуме потребуется объяснять, что такое "виртуальный метод" и чем он влияет на "ничего бы не поменяло". Пожалуйста, обясните, что-такое "виртуальный метод", например, в рамках триггера или хранимой процедуры. Как только в трехзвенках и ормах появятся триггера и хранимые процедуры, я без каких-либо проблем покажу Вам применение виртуальных методов в этих случаях. Собственно, можно и сейчас, проблем нет, но к теме это отношения не имеет. Сергей ВаскецовИбо мне это надо на SQL на уровне сервера. И при чем тут ORM, Вы сами решили, что это именно то, что я имею в виду, ORM при том, что Вам стоило бы читать то, на что Вы отвечаете. Даю ссылку на то, с чего вообще началась эта тема: /topic/402005&pg=4#3862701 Если "Вам это нужно на SQL на уровне сервера", то непонятно, с чего Вы вообще стали отвечать на мой пост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 12:46 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarer Все ясно. Спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 12:53 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaДействительно, что-то не о том. Речь об оптимизации проверки, и делают ли ее СУБД. Отвлечемся от РК, пусть просто в таблице есть две группы уникальных индексов с живой изменчивостью. Чтобы проверить уникальность одного, мне надо перелопатить все записи (про внешние молчу). Я думаю, что одноврменно при этом проверяются и другие уникальные индексы (без дополнительного перелопачивая). Или это не так и проверка по следующему идет заново? Тут обсуждать нечего, тут ответ да-нет предполагается :-) Каждый индекс таблицы обновляется отдельно. Алгоритм примерно такой. СУБД обнаружила, что в записи изменилось индексированное поле. СУБД находит все индексы, в которые это поле включено. В каждом из индексов находит лист со старым значеним ключа (для этого используются эффективные методы поиска, а не "перелопатить все записи"), и удаляет этот лист из индекса, затем находит место, в которое нужно вставить новое значение ключа, вставляет его в индекс и при необходимости балансирует его. Не важно, используется индекс для ограничения целостности или только для оптимизации. Индекс потенциально значительно снижает производительность операций изменения данных. Индексы не зависят друг от друга, ключи в них имеют разный порядок поэтому результат поиска ключа в одном индексе ничего не говорит о том, где может находится другой ключ в другом индексе. Можно в запись таблицы добавить некие адреса листовых блоков индексов, которые ссылаются на эту запись, и при обновлении записи не искать листовые блоки, а получать их прямо по ссылке. Но тогда обновление индекса станет ещё более сложной операцией, так что выгода во времени будет незначительной. Для операции вставки ключа в индекс по любому придётся искать место для ключа традиционными способами. Всё это наверняка написано в книжке концепций СУБД которую ты используешь. В конкретной СУБД могут применяться те или иные особые механизмы. Об этом лучше спросить на тематическом форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 13:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов softwarer Хочу еще добавить на свежую голову вот что. Даже если научиться идентифицировать любую сущность в БД по одному идентификатору, это никак не поможет с часто встречающейся задачей отобразить эту сущность в интерфейсе (в смысле, найти, перейти к ней для просмотра/редактирования). Потому что придется по идентификатору решать задачу вида "а где сущность XXXXXXX отображать?". Вот для этих целей как раз и проще иметь отдельную "часть идентификатора", на которую в простом случае подойдет и имя таблицы. Это не новость. Oracle использует глобальные ROWID для оптимизации доступа по объектным ссылкам (OID), которые кроме всего прочего содержать индекс таблицы или типа, идентифицируемого объекта. Глобальный ROWID занимает больше места, поэтому объектные ссылки по возможности следует ограничивать пределами одной таблицы, чтобы вместо глобального ROWID оракл мог использовать локальный (для таблицы) ROWID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 13:52 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaДействительно, что-то не о том. Речь об оптимизации проверки, и делают ли ее СУБД. Отвлечемся от РК, пусть просто в таблице есть две группы уникальных индексов с живой изменчивостью. Чтобы проверить уникальность одного, мне надо перелопатить все записи (про внешние молчу). Я думаю, что одноврменно при этом проверяются и другие уникальные индексы (без дополнительного перелопачивая). Или это не так и проверка по следующему идет заново? Тут обсуждать нечего, тут ответ да-нет предполагается :-) Да - попытка добавить/изменить данные пресекается, если хоть один UNIQUE нарушен. Нет - exeption будет сгенерирован только по одному нарушенному UNIQUE, даже если я пытался нарушить четыре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
YulkaМне показалось, что Вы ниже согласились со мной, что суррогатные ключи нужно прошить в подкорку. Слова «это абсолютно неверно» обычно не означают согласия. YulkaНо они не прошиты, и вводится и суррогатный PK и UNIQUE INDEX на потенциальные ключи. Мне показалось, что у вас путаница по поводу UNIQUE INDEX. Есть индексы — дополнительные структуры для ускорения поиска — которые могут быть неуникальными или же уникальными (UNIQUIE INDEX). А есть специальное ограничение целостности, определяющее альтернативный ключ — ключевое слово UNIQUE. Типа того: Код: plaintext 1. YulkaВ то время как это (если исключить изменчивость естественных) - по сути одно и то же, и может быть использовано как одно и то же. Что именно «одно и то же»? Ключи и индексы? Это не одно и то же. Суррогатные и естественные ключи? Это «одно и то же» только в смысле соответствия определению потенциального ключа. Вы это имели в виду? YulkaНо ввиду того, что те, что я объявила UNIQUE INDEX, не являются PK, я не могу их точно также использовать дальше (в вычислениях, в зависимых таблицах), а должна вручную их контролировать там. Это почему? Возьмем, к примеру, внешние ключи. По определению, FK может ссылаться на первичный (по умолчанию) или явно указанный альтернативный ключ. Типа того: Код: plaintext 1. 2. YulkaПростите, я подумала, что понятно из контенста предыдущих обсуждений и обсуждаемой ситуации: есть суррогатный PK и ДРУГИЕ поля, являющиеся UNIQUE INDEX для данной таблицы. Видимо, опять вместо UNIQUE INDEX надо понимать альтернативные ключи (UNIQUE), я не ошибаюсь? YulkaПроверять уникальность PK и их ОТДЕЛЬНО это бред, с моей т.з. Вот я и спрашивала, оптимизирована ли такая ситуация в современных СУБД. А вы можете точно сформулировать, что означает «отдельно» или «не отдельно» ? Тогда и можно будет обсудить этот вопрос. Пока ваша мысль не ясна. Yulka mir YulkaИ студентов с множествами учить работать, а не с ключами.Это что же за такое противопоставление: множества VS. ключи? Что бы это значило? Это противопоставление содержательной разработки (теоретико-множественных органичений предметной области) и технической реализации, которая (в ключах, в моделях данных, в СУБД и т.д.) может быть разная. Это, IMHO, противопоставление типа синего и нового . Или теплого и мягкого . Далее, что за странный набор: ключи, модели данных и СУБД ? По какому признаку вы объединили эти вещи в ряд? Простите, я не поспеваю за прыжками (пардон) вашей мысли. Кроме того, вы включили ключи в понятие технической реализации, что является ошибкой. Потенциальные ключи есть часть реляционной модели данных (теории), где они не менее абстрактны, чем, скажем, множества, ибо являются просто определениями. YulkaИзвините, но я не считаю, что люди образуют множество. Я влезу, можно? Думаю, просто имелось в виду, что все люди уникальны, вот и всё. Часто про какую-то совокупность объектов говорят «множество», именно желая подчеркнуть их уникальность, а не как-то теоретически их описать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 10:19 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mir YulkaМне показалось, что Вы ниже согласились со мной, что суррогатные ключи нужно прошить в подкорку. Слова «это абсолютно неверно» обычно не означают согласия. YulkaНо они не прошиты, и вводится и суррогатный PK и UNIQUE INDEX на потенциальные ключи. Мне показалось, что у вас путаница по поводу UNIQUE INDEX. Есть индексы — дополнительные структуры для ускорения поиска — которые могут быть неуникальными или же уникальными (UNIQUIE INDEX). А есть специальное ограничение целостности, определяющее альтернативный ключ — ключевое слово UNIQUE. Типа того: Код: plaintext 1. The Database Engine automatically creates a UNIQUE index to enforce the uniqueness requirement of the UNIQUE constraint. Не надо вводить девочку в заблуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:56 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовThe Database Engine automatically creates a UNIQUE index to enforce the uniqueness requirement of the UNIQUE constraint. Не надо вводить девочку в заблуждение. Из какой книжки цитата? В общем случае это не так. Например, Оракл может создавать ограничения целостности без проверки существующих данных илбо с отложенной до завершения транзакции проверкой. В этом случае для UNIQUE constraint, создаётся NON UNIQUE index. Теоретически, для UNIQUE constraint индекс создавать не обязательно, правда реализовать процедуру провеки ограничения в Online без такого индекса будет проблематично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 15:45 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовThe Database Engine automatically creates a UNIQUE index to enforce the uniqueness requirement of the UNIQUE constraint. Не надо вводить девочку в заблуждение. Из какой книжки цитата? В общем случае это не так. Например, Оракл может создавать ограничения целостности без проверки существующих данных илбо с отложенной до завершения транзакции проверкой. В этом случае для UNIQUE constraint, создаётся NON UNIQUE index. Теоретически, для UNIQUE constraint индекс создавать не обязательно, правда реализовать процедуру провеки ограничения в Online без такого индекса будет проблематично. Книжка называется BOL MS SQL2005. Сдури или по нужде можно много чего делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 16:51 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов mirМне показалось, что у вас путаница по поводу UNIQUE INDEX. Есть индексы — дополнительные структуры для ускорения поиска — которые могут быть неуникальными или же уникальными (UNIQUIE INDEX). А есть специальное ограничение целостности, определяющее альтернативный ключ — ключевое слово UNIQUE. Типа того: Код: plaintext 1. The Database Engine automatically creates a UNIQUE index to enforce the uniqueness requirement of the UNIQUE constraint. Не надо вводить девочку в заблуждение.Не будете ли вы так любезны указать мне, каким именно образом я ввел девочку в заблуждение? Или вы думаете, что привести слабо относящуюся к делу цитату достаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 09:11 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1544689]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
155ms |
get tp. blocked users: |
1ms |
| others: | 292ms |
| total: | 680ms |

| 0 / 0 |
