|
|
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Добрый вечер! Слышал, что на собеседовании в одну уважаемую IT-компанию любят задавать следующий вопрос.. Условие: есть модель БД, известна структура таблиц. Как по этим начальным условиям определить, что две таблицы связаны связью 1 к 1? То есть ( знаю точно, что таких признаков два ), какие должны быть необходимые признаки того, что две таблицы находятся в связи 1 к 1? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2013, 22:42 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
juventine, ну наличие ограничения 1:1 все же предаполагает наличие ОЦ в РМД в общем случае. Если по струкутре - одинаковые имена колононк в разных таблах, связь можно предполагать (с оглядкой конечно на наклонности проектировщика), то для 1:1 все же нужно прописать, скорее всего, ОЦ. Типа уникальность столбцов внешнего ключа, чтобы не допустить 1:N. Если не допустимо 1:0, то ограничение на значение NOT NULL для тех же столбцов. Одной только структурой, вроде, не допустить нарушение 1:1, скорей всего, не получится. А стало быть и определить только по структуре, если и можно, то если в этой уважаемой фирме есть какие-то стандарты для этого. Напрмер, в именах столбцов они что-то налабывают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 09:02 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
vadiminfo, круто... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 11:33 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
vadiminfojuventine, ну наличие ограничения 1:1 все же предаполагает наличие ОЦ в РМД в общем случае. Если по струкутре - одинаковые имена колононк в разных таблах, связь можно предполагать (с оглядкой конечно на наклонности проектировщика), то для 1:1 все же нужно прописать, скорее всего, ОЦ. Типа уникальность столбцов внешнего ключа, чтобы не допустить 1:N. Если не допустимо 1:0, то ограничение на значение NOT NULL для тех же столбцов. Одной только структурой, вроде, не допустить нарушение 1:1, скорей всего, не получится. А ОЦ - это не структура, разве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 11:41 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинА ОЦ - это не структура, разве? OЦ (ограничения целостности) - логические правила, которым должны удовлетворять данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:01 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Ну, с мастер-таблицей всё понятно сразу, на неё сылается внешний ключ дочерней таблицы, а ссылаться он может только на уникальный ключ, то есть, 1..N (N>=0) уже есть 100%. А если поля внешнего ключа в дочерней таблице являются уникальным ключем (AK, PK), то уже этого достаточно чтобы понять, что связь 1..1 или 1..0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:10 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
мне одному кажется, что связи 1 : 1 быть не может только 1 : 0..1 или 0..1 : 0..1 не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:22 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Конечно, если ни в дочерней, ни в мастере нет данных, то можно утверждать, что по <b>этим записям</b> связь 0:0. Но речь то идёт о <b>возможных</b> связях <b>таблицы</b>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:28 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
1:1 - встречные FK на PK. Проблема только с заполнением подобных таблиц, нельзя сделать вставку записей в 2 разных таблицы одновременно, только по очереди, а это уже нарушение 1:1. Так что или deffered FK, или отключать FK на моменты добавления записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:56 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Nafмне одному кажется, что связи 1 : 1 быть не может только 1 : 0..1 или 0..1 : 0..1 не? Ну навязать то, наверное, можно. Вы же можете, скорее всего (Оракл, например, позволяет), взаимные вненшние ключи создать, чтобы не допустить пояление записи в одной не связаннную с другой. Т.е. в принципе может быть навязана. Но возможно, в этом был подвох на собеседовании: должно быть два внешних ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 13:01 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Не видел предыднщего, поэтому повторение получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 13:08 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
juventineСлышал, что на собеседовании в одну уважаемую IT-компанию любят задавать следующий вопрос.. Условие: есть модель БД, известна структура таблиц. Как по этим начальным условиям определить, что две таблицы связаны связью 1 к 1? В обоих таблицах поля PK должны быть одинаковые и кроме этих полей в PK не должно быть других полей. Т.е. у двух таблиц должен полностью совпадать первичный ключ (порядок полей при этом может быть и разным). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 13:19 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Кстати, если вдруг в схеме (модели БД) поля в первичных ключах таблиц называются по-разному, и нет связи (foreign key), но тем не менее это одно и то же поле, то ты ни в жисть не догадаешся, что это связь 1:1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 13:21 |
|
||
|
Необходимые признаки того, что связь 1 к 1
|
|||
|---|---|---|---|
|
#18+
Nafмне одному кажется, что связи 1 : 1 быть не может только 1 : 0..1 или 0..1 : 0..1 не? Да, правильно. Т.е. связь в модели данных может быть и строго 1:1, но в БД она реализуется связью 1:0..1, а дополнительное ограничение, что во второй таблице тоже должна быть связь реализуется логикой приложения (триггером или процедурой). Ну, или вообще не проверяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38137702&tid=1541386]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 351ms |

| 0 / 0 |
