powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос по первичным ключам
25 сообщений из 59, страница 1 из 3
Теоретический вопрос по первичным ключам
    #37473702
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это очень базовый вопрос, на самом деле.
В моем представлении, есть естественный первичный ключ и суррогатный первичный ключ. Естественный первичный ключ - составляется из атрибутов, наличествующих у реального объекта (выделено):
Имя
Фамилия
Отчество

Телефон
Год рождения
Занимаемая должность
...

Но у таблиц, записи которых ссылаются на записи нашей таблицы, должен быть внешний ключ из трех полей. Текстовых. Еще, если они изменятся, придется каскадно обновлять. В общем, стандартный мотив для введения целочисленного идентификатора. IDENTITY в T-SQL. О табельных номерах не говорим)
Это не вопрос!
Но, в процессе работы с БД пользователю придется как-то указывать записи в такой родительской таблице при вводе внешнего ключа дочерней. Как? Вводить целочисленный ключ (выделено)? 12345 никак не ассоциируется с Ивановым для человека. Значит, пользователю придется выбирать какую-то совокупность неключевых атрибутов (синим).
EmployeeID int IDENTITY
Имя
Фамилия
Отчество
Телефон
Год рождения
Занимаемая должность

Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность которого уже не гарантирована СУБД!

И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей?

Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы?

Я неопытен, простите.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473703
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Snufkin...Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность которого уже не гарантирована СУБД!
...
пляха, я те завидую !! ты на пороге открытия !
- уникальный индекс/констрейнт === "альтернативный ключ"
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473707
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473711
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый вопрос отменяется. Я его неправильно задал))) Только второй.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473713
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на второй вопрос по еврейскому обычаю отвечу вопросом
скока прниял то уже? (я в спиртовом эквиваленте)

если серьезно - я вопроса не понял.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473714
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу ты, слепой стал
с Shuklin'ым попутал
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473717
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
U-gene,

нисколько)
>>>
Пользователь добавляет запись в таблицу, в которой 5 внешних ключей. Все они - бессмысленные числа, только указывающие записи в родительских таблицах. Их пять. Значит, он будет выбирать по осмысленным атрибутам. Значит, нужно вытащить 5 таблиц из базы, дать возможность выбрать соотв. строки, указав таким образом нужные значения внешних ключей. Не расходно ли?
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473718
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SnufkinПервый вопрос отменяется. Я его неправильно задал))) Только второй.

а был второй вопрос ?
Snufkin...
И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей?

Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы?

ну и что ? в чём вопрос ? а если в "у таблицы 5 внешних ключей" -100500 милионов записей ?
много записей в справочнике - нормализуй дальше !
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473724
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SnufkinНе расходно ли?
Нет, если выборка сделана правильно - через сильный фильтр. Сначала пользователь вводит
фамилию (или её часть) и только потом из базы достаются всего несколько записей из большой
таблицы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473726
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С этим все ясно. Но частые обращения к родительским таблицам при каждом движении с дочерними - норма?
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473727
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А по первому вопросу я имел в виду, что не запретить же в природе полных тезок. Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по смыслу - одна и та же.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473731
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SnufkinНо частые обращения к родительским таблицам при каждом движении с дочерними - норма?

А ты посчитай: сколько раз в секунду с дочерними таблицами что-то делают, сколько
обращений к родительским при этом происходит. Потом уже по этим цифрам и смотри - норма
это или надо что-то делать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473733
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы на дурацкие вопросы)
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37473739
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SnufkinА по первому вопросу я имел в виду, что не запретить же в природе полных тезок. Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по смыслу - одна и та же.
Вообще по полям можно строить неуникальные индексы. Тогда по вашим полям будет осуществляться поиск, но требования уникальности накладываться не будут.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37474110
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.10.2011 0:36, Snufkin wrote:

> Таким образом, эти атрибуты мы негласно считаем первичным ключом. Уникальность
> которого уже не гарантирована СУБД!

Нет, мы считаем это не первичным ключём, а вторичным ключём.
И делаем UNIQUE CONSTRAINT на эти поля.

> И еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все
> суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5
> родительских таблиц???

да

Ведь все ай-ди он укажет косвенно, через осмысленные
> атрибуты. А если в базах по несколько тысяч записей?

да хоть по миллиарду, какая разница-то ?

> Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это
> всегда вытаскивание из базы родительской таблицы?

Вопрос чисто технический, и запомни на него ответ:
естественных ключей в реальном мире не существует.
Зная этот ответ ты всегда будеш проектировать свои БД грамотно
и надёжно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37474112
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.10.2011 0:56, Snufkin wrote:

> Пользователь добавляет запись в таблицу, в которой 5 внешних ключей. Все они -
> бессмысленные числа, только указывающие записи в родительских таблицах. Их пять.
> Значит, он будет выбирать по осмысленным атрибутам. Значит, нужно вытащить 5
> таблиц из базы, дать возможность выбрать соотв. строки, указав таким образом
> нужные значения внешних ключей. Не расходно ли?

Это -- вопрос правильной организации поиска в этих пяти таблицах.
Как его сделаеш, так и будет.
Но на самом деле ты должен понимать главное -- ДРУГОГО ПУТИ НЕТ.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37474114
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.10.2011 1:01, Snufkin wrote:
> С этим все ясно. Но частые обращения к родительским таблицам при каждом движении
> с дочерними - норма?

Что значит обращение ? Каждый FK -- это один JOIN. Это быстрая, дешёвая операция
(JOIN по FK-PK по равенству, это быстро).
Да, это норма.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37474116
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.10.2011 1:05, Snufkin wrote:

> А по первому вопросу я имел в виду, что не запретить же в природе полных тезок.
> Именно это мы сделали бы, введя UNIQUE CONSTRAINT. Формально записи разные; по
> смыслу - одна и та же.

Я что-то не понял, ты же вроде бы собирался те же поля первичным ключём делать.
Там ты про это не думал ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37474649
Snufkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivOn 08.10.2011 1:05, Snufkin wrote:

> А по первому вопросу я имел в виду...

Я что-то не понял, ты же вроде бы собирался те же поля первичным ключём делать.
Там ты про это не думал ?


Да, я глупость сказал...

Правда, осмысленный первичный ключ, предлагаемый предметной областью, который не накладывает неестественных ограничений на записи (как запрет тезок и т.п.) это табельные и порядковые номера и т.д. В остальных случаях уместен суррогатный ключ, хотя бы с технической точки зрения.

Спасибо за ответы! Отдельное спасибо MasterZiv.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37499900
kugu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Snufkin,

0) какая база данных?

SnufkinВ моем представлении, есть естественный первичный ключ и суррогатный первичный ключ. Естественный первичный ключ - составляется из атрибутов, наличествующих у реального объекта (выделено):
Имя
Фамилия
Отчество
Телефон
Год рождения
Занимаемая должность

Если _хорошенько_ _вдуматься_ "естественный" первичный ключ - это _ВСЯ_ запись целиком. А "суррогатный" это его короткий псевдоним. Так быстрее и удобнее.

SnufkinИ еще один вопрос, не менее важный. Допустим, у таблицы 5 внешних ключей. Все суррогатные. Для добавления записи, для пользователя нужно вытащить из базы 5 родительских таблиц??? Ведь все ай-ди он укажет косвенно, через осмысленные атрибуты. А если в базах по несколько тысяч записей?

Таким образом, вопрос чисто технический: ввод внешнего суррогатного ключа - это всегда вытаскивание из базы родительской таблицы?

1) Покажите, что за данные имеющие 5 внешних ключей для одной сущности?

2) Кто сказал, что для проверки внешнего ключа нужно "вытаскивание из базы родительской таблицы?" Что вы хотите проверить таким образом? Достаточно проверить существование одного конкретного ключа в _индексе_.

3) Зачем вообще нужны внешние ключи? Вот, например, вы добавляете сотрудника в отдел, зачем нужна проверка внешнего ключа в таблице "список существующих отделов"? Если-бы такого отдела не существовало - вы бы не захотели добавлять туда сотрудника). А если у вас вдруг происходят такие "левые" добавления - проблема в вашем приложении.
Ну или например у того-же сотрудника есть внешний ключ на начальника. Механизм внешних ключей может проверить только принципиальное наличие "начальника" в таблице сотрудников, но нисколько не поможет избежать ситуации когда уборщица руководит генеральным директором. Собсна, нафиг тогда нужна такая проверка? Избыточный педантизм ценой системных ресурсов?
Мораль: DROP ALL FOREIGN KEYS; Все (разумные) проверки на уровне приложения.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37499914
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuguМораль: DROP ALL FOREIGN KEYS
....и убейся об стену сам, не дожидаясь пока это с тобой проделают другие.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37500314
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkuguМораль: DROP ALL FOREIGN KEYS
....и убейся об стену сам, не дожидаясь пока это с тобой проделают другие.

Можно я?! :).
Бедный Кугу...
"нисколько не поможет избежать ситуации когда уборщица руководит генеральным директором. Собсна, нафиг тогда нужна такая проверка?". Действительно, если я на машине добираюсь до работы за 15 мин, на маршрутке за 1 час, но не могу на машине добраться за 3 минуты - нафиг мне нужна такая машина! :)


Или счастливый...

Наверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :)
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37500329
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :)
Да нет, просто ему никогда не приходилось писать ничего серьезнее "Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео". Иначе бы он знал, что в сложном приложении легко допустить ошибку, которая будет иногда потихоньку вносить некорректные данные, и, когда спустя полгода это всплывет, выяснится, что даже продажа сего гения на органы не позволит компенсировать и сотой части ущерба.
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37501656
iljyАнатоЛойНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"... И уж "приложение" точно не допускает, чтобы уборщица руководила генеральным директором. :)
Да нет, просто ему никогда не приходилось писать ничего серьезнее "Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео". Иначе бы он знал, что в сложном приложении легко допустить ошибку, которая будет иногда потихоньку вносить некорректные данные, и, когда спустя полгода это всплывет, выяснится, что даже продажа сего гения на органы не позволит компенсировать и сотой части ущерба.
это скорее вышеотозвавшиеся на реплику об FK ничего кроме унылых говнобухгалтерий на 10 пользователей не писали.
авторНаверное, у Кугу все данные в БД попадают и будут попадать только через "приложение"
хвастаетесь тем что непойми кто может ковырять напрямую таблицы в вашей автор"Самого-Супер-Пупер-Раскрутейшего-Приложения-По-Учету-Всего-Превсего-Моего-Домашнего-Видео"
?
...
Рейтинг: 0 / 0
Теоретический вопрос по первичным ключам
    #37501669
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даете блин...хвастаетесь тем что непойми кто может ковырять напрямую таблицы

Констатируем упрямый факт. Ибо - будут. Что ни делай, всё равно - будут.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос по первичным ключам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]