|
|
|
объясните про связь первичного и внешнего ключа
|
|||
|---|---|---|---|
|
#18+
здравствуйте! пару недель усиленно учу теорию по базам данным и язык sql. вроде все понятно, но вот есть такая непонятка: пусть есть две таблицы: т1 и т2. в таблице т1 есть первичный ключ а, в таблице т2 есть внешний ключ b, который ссылается на а. я так понимаю, что теперь т2 это слабая сущность, т.к. пока мы не внесем данные в т1, в т2 ничего записать не получится. и вот вопрос: а как мы будем записывать в т2, если не знаем значение первиченого ключа из т1? например он суррогатный(число)? поясните этот момент пожалуйста, с примерами если не сложно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 22:58 |
|
||
|
объясните про связь первичного и внешнего ключа
|
|||
|---|---|---|---|
|
#18+
для того чтобы внести строчку в т2, надо знать значение а, для которого вносится строчка. Если первичный ключ из т1 - неизвестен, то незачем вносить строчку в т2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 23:50 |
|
||
|
объясните про связь первичного и внешнего ключа
|
|||
|---|---|---|---|
|
#18+
драконя так понимаю, что теперь т2 это слабая сущность Хм. В теории есть такой термин? дракон, т.к. пока мы не внесем данные в т1, в т2 ничего записать не получится. Это не есть истина. Существуют минимум два способа "получится". дракона как мы будем записывать в т2, если не знаем значение первиченого ключа из т1? Хм. А кто ударил нам по голове так удачно, что мы его забыли? драконнапример он суррогатный(число)? И? Какой бы суррогатный он ни был, откуда-то он взялся и попал в одно место (в первичный ключ). Значит, может попасть и в два места (в первичный и во внешний ключ). драконпоясните этот момент пожалуйста, с примерами если не сложно :) Хм. Например, в Oracle это будет выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 03:00 |
|
||
|
объясните про связь первичного и внешнего ключа
|
|||
|---|---|---|---|
|
#18+
дракон а как мы будем записывать в т2, если не знаем значение первиченого ключа из т1? например он суррогатный(число)? это обходится так: надо *сначала* получить значение первичного ключа, и потом записывать ключ вместе с данными в т1 и т2. В firebird для этого используются генераторы. Генератор, это число, хранящееся в БД, которое мы в один прием: (1. увеличиваем на единицу 2.берем получившееся значение.) таким образом, у нас оказывается уникальное (единственное) число, годное для первичного ключа. В многопользовательской среде, если несколько пользователей "одновременно" хотят получить ключ, то .. они не получают его одновременно, а сервер ставит их в очередь. таким образом каждый получает свой уникальный ключ, и уже неважно, кто и когда успеет вставить свои записи. Для этого генератор стоит "вне контекста транзакции", ... а что это такое я уже не буду писать, так как утомился от умственного напряжения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 19:32 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=166&tid=1346208]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 295ms |

| 0 / 0 |
