powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / использование PrimaryKey
25 сообщений из 41, страница 1 из 2
использование PrimaryKey
    #32040139
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проясните, пожалуйста !
У меня в таблице в состав PK должны входить две даты, но по логике работы, таких запросов не существует, т.к. эти даты суть границы диапазона. Если я не буду декларировать наличие PK у таблицы, что я нарушу, или в чем здесь ошибка ?
P.S. Индексы существуют. У значений дат время сброшено в нуль.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040140
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в состав PK входят только эти два поля с датами? или еще что-то?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040141
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главное, чтобы у таблицы был бы хотя бы один уникальный индекс... Все остальное - от лукавого :)
а обзовете ли вы его РК или нет, дело ваше...
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040142
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
физически все работать будет. А вот концептуально... Это называется "слабая сущность" вроде
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040148
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to AVL
в состав PK кроме пары дат входят и другие атрибуты.
А чем мне грозит использование "слабой сущности" ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040150
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:
Согласен, что PK - это выбранный из всех возможных. Меня смущает, что Codd, кажется говорил, что для каждого базового отношения PK должен быть выбран.
Или я путаю ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040152
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слабая сущность - когда на нее не сделать references, т.е. если на эту таблицу нигде не будет ссылок.
Иногда для обеспечения именно ссылочной целостности применяют суррогатный первичный ключ.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040154
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если эта таблица используется как справочник, то наличие PK обязательно. Иначе - достаточно уникального индекса
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040163
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многострадальная таблица - это так называемая таблица связи "работник" - "бригада":
table kadrdept(idKadr, idDept, dbeg, dEnd),
она хранит принадлежность работника к подразделению предприятия. Ссылки на нее конечно есть. По idKadr и idDept.

1.Правильно ли я понял, что объявлять для этой таблицы
PK as {idKadr, idDept, dbeg, dEnd} не обязательно ?
2. Думаю в данном случае и формирование PK как некий суррогатный ключ также не нужно.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040174
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица без ключа говорит об ошибках проектирования.
Суррогатный ключ дает возможность более быстрого объединения таблиц. В случае наличия суррогатного ключа, в таблице должен быть альтернативный ключ.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040180
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Genady
1. Я считаю также.
2. Следовательно, в таблицу
table kadrdept(idKadr, idDept, dbeg, dEnd) требуется добавить поле idSurrogate ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040183
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) да. и еще уникальный индекс по 4 полям
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040185
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sql

Я не могу давать Вам совет добавлять атрибут в отношение или нет, т.к. из Вашего описания трудно понять задачу. Я не знаю что значит у Вас таблица связи, таблица которая обеспечивает отношение многие ко многим?
Что касается суррогатного ключа, то надо изначально решить использовать его или нет и в дальнейшем однообразно проектировать все сущьности.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040196
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Genady
Да, таблица
table kadrdept(idKadr, idDept, dbeg, dEnd)
связана с table kadr(idKadr, ...) как (M:1) и с таблицей
table dept(idDept, ...) как (N:1).
А суррогатные ключи я использую не редко.
Однако, (к моему сожалению) не вижу, чем грозит отказ от объявления PK для таблицы kadrdept ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040213
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае, для Вашей таблицы РК будет состоять из двух полей idKadr, idDept и дополнительно ничего добавлять не нужно.

А суррогатные ключи я использую не редко.
Суррогатные ключи надо либо использовать либо не использовать. Если используете, то используете во всех таблицах, не забывая определять альтернативные ключи, которые были бы первичными если бы не использовались суррогатные.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040215
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один совет - давайте таблицам и столбзам осмысленные названия, это поможет при проектировании и в дальнейшем при сопровождении.

Например, Ваш Dept лучше назвать Department, сущьность должна соответствовать какому то реальному объекту, дав правильное название сущности Вы можете проверить себя, правильно ли эту сущность определили.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040217
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Genady
1. Если использовать только два поля idKadr и idDept, то где хранить "историю данных" ? Например, как отследить изменени численности работников подразделения за период (месяц, квартал, год) ?
2. У меня большинство ключей - суррогатные ключи, но
на чем основано приведенное Вами правило "Суррогатные ключи надо либо использовать либо не использовать." ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040219
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pk: либо все 4 поля, либо суррогатный
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040220
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pk: либо все 4 поля, либо суррогат
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040221
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения за повтор - глюки с нашей прокси
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040226
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если использовать только два поля idKadr и idDept, то где хранить "историю данных" ? Например, как отследить изменени численности работников подразделения за период (месяц, квартал, год) ?

Не вникнув в Вашу задачу и не проанализировав исходные данные я не могу дать ответ, если Вы заметили все мои советы это рекомендации к методологии, а правильно определить сущьности это уже Ваша забота как разработчика.

на чем основано приведенное Вами правило "Суррогатные ключи надо либо использовать либо не использовать." ?

Ну скажем так, это не правило а совет, Вам просто будет проще работать с таблицами созданными по одним и тем же правилам.
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040229
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pk: либо все 4 поля, либо суррогат

Почему?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040237
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри. Конечно от постановки задачи зависит :)
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040241
sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Genady
1. Согласен со всеми Вашими замечаниями (короткие наименования типа "dept" я просто использую для форума).
2. Если мое решение ошибочно (как часть проекта), то рискну предложить вариант:
вместо таблицы kadrdept(idKadr, idDept, dbeg, dEnd)
использовать
новаю таблицу kadrdept(idKadr, idDept, idSurrogate) и
дополнительную таблицу history(idSurrogate, dBeg, dEnd).
При этом нет вопросов о PK.
Это - решение ?
...
Рейтинг: 0 / 0
использование PrimaryKey
    #32040243
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделал все в одной таблице, зачем усложнять базу?
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / использование PrimaryKey
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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