|
|
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Это очень базовый вопрос, на самом деле. В моем представлении, есть естественный первичный ключ и суррогатный первичный ключ. Естественный первичный ключ - составляется из атрибутов, наличествующих у реального объекта (выделено): Имя Фамилия Отчество Телефон Год рождения Занимаемая должность ... Но у таблиц, записи которых ссылаются на записи нашей таблицы, должен быть внешний ключ из трех полей. Текстовых. Еще, если они изменятся, придется каскадно обновлять. В общем, стандартный мотив для введения целочисленного идентификатора. IDENTITY в T-SQL. О табельных номерах не говорим) Это не вопрос! Но, в процессе работы с БД пользователю придется как-то указывать записи в такой родительской таблице при вводе внешнего ключа дочерней. Как? Вводить целочисленный ключ (выделено)? 12345 никак не ассоциируется с Ивановым для человека. Значит, пользователю придется выбирать какую-то совокупность неключевых атрибутов (синим). EmployeeID int IDENTITY Имя Фамилия Отчество Телефон Год рождения Занимаемая должность Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность которого уже не гарантирована СУБД! И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей? Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы? Я неопытен, простите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:36 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Snufkin...Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность которого уже не гарантирована СУБД! ... пляха, я те завидую !! ты на пороге открытия ! - уникальный индекс/констрейнт === "альтернативный ключ" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:40 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
You can use UNIQUE constraints to make sure that no duplicate values are entered in specific columns that do not participate in a primary key. Although both a UNIQUE constraint and a PRIMARY KEY constraint enforce uniqueness, use a UNIQUE constraint instead of a PRIMARY KEY constraint when you want to enforce the uniqueness of a column, or combination of columns, that is not the primary key. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:44 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Первый вопрос отменяется. Я его неправильно задал))) Только второй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:47 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
на второй вопрос по еврейскому обычаю отвечу вопросом скока прниял то уже? (я в спиртовом эквиваленте) если серьезно - я вопроса не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:48 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
тьфу ты, слепой стал с Shuklin'ым попутал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:50 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
U-gene, нисколько) >>> Пользователь добавляет запись в таблицу, в которой 5 внешних ключей. Все они - бессмысленные числа, только указывающие записи в родительских таблицах. Их пять. Значит, он будет выбирать по осмысленным атрибутам. Значит, нужно вытащить 5 таблиц из базы, дать возможность выбрать соотв. строки, указав таким образом нужные значения внешних ключей. Не расходно ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:56 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
SnufkinПервый вопрос отменяется. Я его неправильно задал))) Только второй. а был второй вопрос ? Snufkin... И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей? Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы? ну и что ? в чём вопрос ? а если в "у таблицы 5 внешних ключей" -100500 милионов записей ? много записей в справочнике - нормализуй дальше ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 23:57 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
SnufkinНе расходно ли? Нет, если выборка сделана правильно - через сильный фильтр. Сначала пользователь вводит фамилию (или её часть) и только потом из базы достаются всего несколько записей из большой таблицы. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:00 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
С этим все ясно. Но частые обращения к родительским таблицам при каждом движении с дочерними - норма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:01 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
А по первому вопросу я имел в виду, что не запретить же в природе полных тезок. Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по смыслу - одна и та же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:05 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
SnufkinНо частые обращения к родительским таблицам при каждом движении с дочерними - норма? А ты посчитай: сколько раз в секунду с дочерними таблицами что-то делают, сколько обращений к родительским при этом происходит. Потом уже по этим цифрам и смотри - норма это или надо что-то делать. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:08 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы на дурацкие вопросы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:12 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
SnufkinА по первому вопросу я имел в виду, что не запретить же в природе полных тезок. Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по смыслу - одна и та же. Вообще по полям можно строить неуникальные индексы. Тогда по вашим полям будет осуществляться поиск, но требования уникальности накладываться не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 00:16 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
On 08.10.2011 0:36, Snufkin wrote: > Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность > которого уже не гарантирована СУБД! Нет, мы считаем это не первичным ключём, а вторичным ключём. И делаем UNIQUE CONSTRAINT на эти поля. > И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все > суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 > родительских таблиц??? да Ведь все ай-ди он укажет косвенно, через осмысленные > атрибуты. А если в базах по несколько тысяч записей? да хоть по миллиарду, какая разница-то ? > Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это > всегда вытаскивание из базы родительской таблицы? Вопрос чисто технический, и запомни на него ответ: естественных ключей в реальном мире не существует. Зная этот ответ ты всегда будеш проектировать свои БД грамотно и надёжно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 19:39 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
On 08.10.2011 0:56, Snufkin wrote: > Пользователь добавляет запись в таблицу, в которой 5 внешних ключей. Все они - > бессмысленные числа, только указывающие записи в родительских таблицах. Их пять. > Значит, он будет выбирать по осмысленным атрибутам. Значит, нужно вытащить 5 > таблиц из базы, дать возможность выбрать соотв. строки, указав таким образом > нужные значения внешних ключей. Не расходно ли? Это -- вопрос правильной организации поиска в этих пяти таблицах. Как его сделаеш, так и будет. Но на самом деле ты должен понимать главное -- ДРУГОГО ПУТИ НЕТ. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 19:41 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
On 08.10.2011 1:01, Snufkin wrote: > С этим все ясно. Но частые обращения к родительским таблицам при каждом движении > с дочерними - норма? Что значит обращение ? Каждый FK -- это один JOIN. Это быстрая, дешёвая операция (JOIN по FK-PK по равенству, это быстро). Да, это норма. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 19:42 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
On 08.10.2011 1:05, Snufkin wrote: > А по первому вопросу я имел в виду, что не запретить же в природе полных тезок. > Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по > смыслу - одна и та же. Я что-то не понял, ты же вроде бы собирался те же поля первичным ключём делать. Там ты про это не думал ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 19:43 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 08.10.2011 1:05, Snufkin wrote: > А по первому вопросу я имел в виду... Я что-то не понял, ты же вроде бы собирался те же поля первичным ключём делать. Там ты про это не думал ? Да, я глупость сказал... Правда, осмысленный первичный ключ, предлагаемый предметной областью, который не накладывает неестественных ограничений на записи (как запрет тезок и т.п.) это табельные и порядковые номера и т.д. В остальных случаях уместен суррогатный ключ, хотя бы с технической точки зрения. Спасибо за ответы! Отдельное спасибо MasterZiv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2011, 17:41 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Snufkin, 0) какая база данных? SnufkinВ моем представлении, есть естественный первичный ключ и суррогатный первичный ключ. Естественный первичный ключ - составляется из атрибутов, наличествующих у реального объекта (выделено): Имя Фамилия Отчество Телефон Год рождения Занимаемая должность Если _хорошенько_ _вдуматься_ "естественный" первичный ключ - это _ВСЯ_ запись целиком. А "суррогатный" это его короткий псевдоним. Так быстрее и удобнее. SnufkinИ еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей? Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы? 1) Покажите, что за данные имеющие 5 внешних ключей для одной сущности? 2) Кто сказал, что для проверки внешнего ключа нужно "вытаскивание из базы родительской таблицы?" Что вы хотите проверить таким образом? Достаточно проверить существование одного конкретного ключа в _индексе_. 3) Зачем вообще нужны внешние ключи? Вот, например, вы добавляете сотрудника в отдел, зачем нужна проверка внешнего ключа в таблице "список существующих отделов"? Если-бы такого отдела не существовало - вы бы не захотели добавлять туда сотрудника). А если у вас вдруг происходят такие "левые" добавления - проблема в вашем приложении. Ну или например у того-же сотрудника есть внешний ключ на начальника. Механизм внешних ключей может проверить только принципиальное наличие "начальника" в таблице сотрудников, но нисколько не поможет избежать ситуации когда уборщица руководит генеральным директором. Собсна, нафиг тогда нужна такая проверка? Избыточный педантизм ценой системных ресурсов? Мораль: DROP ALL FOREIGN KEYS; Все (разумные) проверки на уровне приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 00:27 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
kuguМораль: DROP ALL FOREIGN KEYS ....и убейся об стену сам, не дожидаясь пока это с тобой проделают другие. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 00:42 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovkuguМораль: DROP ALL FOREIGN KEYS ....и убейся об стену сам, не дожидаясь пока это с тобой проделают другие. Можно я?! :). Бедный Кугу... "нисколько не поможет избежать ситуации когда уборщица руководит генеральным директором. Собсна, нафиг тогда нужна такая проверка?". Действительно, если я на машине добираюсь до работы за 15 мин, на маршрутке за 1 час, но не могу на машине добраться за 3 минуты - нафиг мне нужна такая машина! :) Или счастливый... Наверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 11:18 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
АнатоЛойНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :) Да нет, просто ему никогда не приходилось писать ничего серьезнее "Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео". Иначе бы он знал, что в сложном приложении легко допустить ошибку, которая будет иногда потихоньку вносить некорректные данные, и, когда спустя полгода это всплывет, выяснится, что даже продажа сего гения на органы не позволит компенсировать и сотой части ущерба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 11:25 |
|
||
|
Теоретический вопрос по первичным ключам
|
|||
|---|---|---|---|
|
#18+
iljyАнатоЛойНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :) Да нет, просто ему никогда не приходилось писать ничего серьезнее "Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео". Иначе бы он знал, что в сложном приложении легко допустить ошибку, которая будет иногда потихоньку вносить некорректные данные, и, когда спустя полгода это всплывет, выяснится, что даже продажа сего гения на органы не позволит компенсировать и сотой части ущерба. это скорее вышеотозвавшиеся на реплику об FK ничего кроме унылых говнобухгалтерий на 10 пользователей не писали. авторНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение" хвастаетесь тем что непойми кто может ковырять напрямую таблицы в вашей автор"Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 22:05 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37473714&tid=1541867]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 316ms |

| 0 / 0 |
