|
|
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Проясните, пожалуйста ! У меня в таблице в состав PK должны входить две даты, но по логике работы, таких запросов не существует, т.к. эти даты суть границы диапазона. Если я не буду декларировать наличие PK у таблицы, что я нарушу, или в чем здесь ошибка ? P.S. Индексы существуют. У значений дат время сброшено в нуль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 08:45:02 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
в состав PK входят только эти два поля с датами? или еще что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 08:50:33 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Главное, чтобы у таблицы был бы хотя бы один уникальный индекс... Все остальное - от лукавого :) а обзовете ли вы его РК или нет, дело ваше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 08:56:50 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
физически все работать будет. А вот концептуально... Это называется "слабая сущность" вроде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 09:03:25 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to AVL в состав PK кроме пары дат входят и другие атрибуты. А чем мне грозит использование "слабой сущности" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 09:26:53 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Вдогонку: Согласен, что PK - это выбранный из всех возможных. Меня смущает, что Codd, кажется говорил, что для каждого базового отношения PK должен быть выбран. Или я путаю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 09:36:01 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
слабая сущность - когда на нее не сделать references, т.е. если на эту таблицу нигде не будет ссылок. Иногда для обеспечения именно ссылочной целостности применяют суррогатный первичный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 09:40:59 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
если эта таблица используется как справочник, то наличие PK обязательно. Иначе - достаточно уникального индекса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 09:43:54 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Многострадальная таблица - это так называемая таблица связи "работник" - "бригада": table kadrdept(idKadr, idDept, dbeg, dEnd), она хранит принадлежность работника к подразделению предприятия. Ссылки на нее конечно есть. По idKadr и idDept. 1.Правильно ли я понял, что объявлять для этой таблицы PK as {idKadr, idDept, dbeg, dEnd} не обязательно ? 2. Думаю в данном случае и формирование PK как некий суррогатный ключ также не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 10:27:49 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Таблица без ключа говорит об ошибках проектирования. Суррогатный ключ дает возможность более быстрого объединения таблиц. В случае наличия суррогатного ключа, в таблице должен быть альтернативный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 10:45:45 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to Genady 1. Я считаю также. 2. Следовательно, в таблицу table kadrdept(idKadr, idDept, dbeg, dEnd) требуется добавить поле idSurrogate ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 11:07:12 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
:) да. и еще уникальный индекс по 4 полям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 11:20:03 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
2 sql Я не могу давать Вам совет добавлять атрибут в отношение или нет, т.к. из Вашего описания трудно понять задачу. Я не знаю что значит у Вас таблица связи, таблица которая обеспечивает отношение многие ко многим? Что касается суррогатного ключа, то надо изначально решить использовать его или нет и в дальнейшем однообразно проектировать все сущьности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 11:22:54 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to Genady Да, таблица table kadrdept(idKadr, idDept, dbeg, dEnd) связана с table kadr(idKadr, ...) как (M:1) и с таблицей table dept(idDept, ...) как (N:1). А суррогатные ключи я использую не редко. Однако, (к моему сожалению) не вижу, чем грозит отказ от объявления PK для таблицы kadrdept ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 11:38:57 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
В таком случае, для Вашей таблицы РК будет состоять из двух полей idKadr, idDept и дополнительно ничего добавлять не нужно. А суррогатные ключи я использую не редко. Суррогатные ключи надо либо использовать либо не использовать. Если используете, то используете во всех таблицах, не забывая определять альтернативные ключи, которые были бы первичными если бы не использовались суррогатные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:07:56 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
И еще один совет - давайте таблицам и столбзам осмысленные названия, это поможет при проектировании и в дальнейшем при сопровождении. Например, Ваш Dept лучше назвать Department, сущьность должна соответствовать какому то реальному объекту, дав правильное название сущности Вы можете проверить себя, правильно ли эту сущность определили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:11:48 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to Genady 1. Если использовать только два поля idKadr и idDept, то где хранить "историю данных" ? Например, как отследить изменени численности работников подразделения за период (месяц, квартал, год) ? 2. У меня большинство ключей - суррогатные ключи, но на чем основано приведенное Вами правило "Суррогатные ключи надо либо использовать либо не использовать." ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:18:53 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
pk: либо все 4 поля, либо суррогатный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:21:31 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
pk: либо все 4 поля, либо суррогат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:22:05 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
прошу прощения за повтор - глюки с нашей прокси ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:22:58 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
1. Если использовать только два поля idKadr и idDept, то где хранить "историю данных" ? Например, как отследить изменени численности работников подразделения за период (месяц, квартал, год) ? Не вникнув в Вашу задачу и не проанализировав исходные данные я не могу дать ответ, если Вы заметили все мои советы это рекомендации к методологии, а правильно определить сущьности это уже Ваша забота как разработчика. на чем основано приведенное Вами правило "Суррогатные ключи надо либо использовать либо не использовать." ? Ну скажем так, это не правило а совет, Вам просто будет проще работать с таблицами созданными по одним и тем же правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:26:10 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
pk: либо все 4 поля, либо суррогат Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:27:22 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
сорри. Конечно от постановки задачи зависит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:40:56 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to Genady 1. Согласен со всеми Вашими замечаниями (короткие наименования типа "dept" я просто использую для форума). 2. Если мое решение ошибочно (как часть проекта), то рискну предложить вариант: вместо таблицы kadrdept(idKadr, idDept, dbeg, dEnd) использовать новаю таблицу kadrdept(idKadr, idDept, idSurrogate) и дополнительную таблицу history(idSurrogate, dBeg, dEnd). При этом нет вопросов о PK. Это - решение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:46:55 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
я бы сделал все в одной таблице, зачем усложнять базу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 12:48:47 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
А какая необходимость вообще распространять ограничения на даты? Это же интервалы времени. Могут ли они пересекаться? как отслеживается такая ситуация? может имеет смысл сделать суррогатный ключ и добавить индекс по (idKadr, idDept) и при необходимости на даты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:01:10 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to AVL Предложенный вариант усложняет немало, однако в исходном виде в проекте, я согласен с Genady, есть ошибки. И я их не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:05:19 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
давайте по порядку: может ли человек работать в бригаде несколько раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:12:03 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
может ли он одновременно работать в нескольких бригадах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:16:40 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
новаю таблицу kadrdept(idKadr, idDept, idSurrogate) и дополнительную таблицу history(idSurrogate, dBeg, dEnd). Плохое решение и непонятно чем мотивировано. Вы или подробно опишите задачу или решайте все сами, с теми данными которые Вы предоставили Вам никто ничего толкового не скажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:19:35 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
to AVL 1. Человек в течении месяца может быть переведен в другую бригду неоднократно (более 2-х раз). 2. В каждый момент времени человек может работать только в одной бригаде. 3. Согласованность дат, - требуется только их непересекаемость, отслеживается логикой работы с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:22:42 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Pk: idKadr, idDept, dbeg. Все в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:26:09 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Задача такова: 1. Существуют работники. 2. Существуют бригады. 3. В каждый момент времени работник может работать не более чем в одной бригаде, или ни в какой. Момент времени - это дата. 4. В любой момент времени работник может быть переведен в другую бригаду, или перестать работать в какой л.б. Требуется на произвольный момент времени предоставить отчет о списке работников, работающих в данной бригаде. А также списочный состав всех бригад на произвольный момент времени. Приведенное мной на форуме решение содержит ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 13:41:10 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
2 sql В Вашем первом варианте, кроме отсутствия РК я ошибок не вижу, вариант РК предложил AVL я с ним согласен. Кроме того, если человек на может работать одновременно в нескольких бригадах я бы добавил еще одно поле CurrentWork которое являлось бы флажком для обозначения того, что запись не является историей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 14:16:24 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Нет снимаю предложение с добавлением поля, для определения исторических записей вполне подойдет dEnd. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 14:17:59 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Я просто очарован: обновлення сущность kadrDepartament(idKadr, idDepartament, dateEnd) позволяет решить задачу, и, как всякая реляционная имеет PK as {idKadr, idDepartament, dateEnd}. Я правильно все понял ? Если так, то какой бес навеял мне использование именно пары дат ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 14:35:44 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
а как же дата начала работы dbeg? уфф... у меня уже брожение мозгов.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 14:41:32 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
kadrDepartament(idKadr, idDepartament, dateBegin, dateEnd) PK - idKadr, idDepartament, dateBegin FK - idKadr FK - idDepartament ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 14:54:12 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, занесло. Структура таблицы kadrDept не меняется, но, по условиям задачи (в каждый момент времени работник в одной бригаде) в качестве PK может использоваться набор {idKadr, idDept, dBeg}. По-моему, так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 15:01:28 |
|
||
|
использование PrimaryKey
|
|||
|---|---|---|---|
|
#18+
Genady, AVL ! Спасибо. И всем, кто помог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2002, 15:08:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1821412]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 450ms |

| 0 / 0 |
