|
|
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
Скажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 17:24 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
bukinatorСкажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много? Забавный вопрос.Если у Вас не нарушена нормальная форма(НФБК), то это обязательное условие. Если нарушена и у Вас составной ключ из 2х атрибутов имеет атрибут, который является identity для таблицы..то логично, что достаточно связывать по одному атрибуту :-)..но тогда Вам можно начинать ломать руки :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 17:30 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
=Lucky=bukinatorСкажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много? Забавный вопрос.Если у Вас не нарушена нормальная форма(НФБК), то это обязательное условие. а составные ключи ведь не запрещены? с чего вдруг будет нарушена нормальная форма? даже в определениях нормальных форм сказано про составной ключ: 1НФ-атрибуты зависят от всего составного ключа, а не от его части; 2НФ-атрибуты не зависят не от чего, кроме ключа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 18:10 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
bukinatorа составные ключи ведь не запрещены? с чего вдруг будет нарушена нормальная форма? даже в определениях нормальных форм сказано про составной ключ: 1НФ-атрибуты зависят от всего составного ключа, а не от его части; 2НФ-атрибуты не зависят не от чего, кроме ключа Я Вам привел название нормальной формы(полное её название: Нормальная форма Бойса-Клодда ) и в каком случае она будет нарушена :-) Если она не нарушена, то каким образом вы однозначно идентифицируете картеж в сущности, для которой в качестве первично ключа будет являться составной первичный ключ, а вы будите использовать лишь часть этого первичного ключа???Подумайте сами... Ну и почитайте книги по теории реляционных БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 18:22 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
=Lucky=,блин....немного описАлся...Бойcа-Кодда :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 18:24 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
а может такое быть, что первичный ключ из первой таблицы будет так же первичным ключом из второй таблицы, но уже как часть составного? или первичный ключ одной таблицы может быть только внешним для другой? мне тут срочно бд надо заделать, а я реляционную теорию вспомнить не могу, читать долго слишком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 22:21 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
Ну в общем есть таблица "точки" и есть таблица "продукты" , каждый продукт может быть во многих точках и каждая точка может иметь несколько продуктов. я сделал таблицу "точки" в которой первичный ключ="id_point" и таблицу "продукты" в которой первичный ключ = составной ключ "id_point"+"type_product", и ключ "id_point" из первой таблицы связан с ключем "id_point" из второй таблицы. В общем, это неправильно у меня получилось или как? помогите сделать правильную таблицу. можно конечно сделать так: в таблицу "продукты" добавить атрибут "id", сделать его ключем, а те атрибуты, которые щас входят в составной ключ, сделать не ключевыми. тогда вроде проблемы нет, но мне почему то кажется, что лучше оставить составной ключ, так как если ключем сделать атрибут "id", то в таблицу теоретически можно будет добавлять записи с одинаковым значением неключевых атрибутов (например первая запись - id=1, id_point=55, type_product=kefir и вторая запись - id=2, id_point=55, type_product=kefir и т.д) а это неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2010, 23:51 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
bukinator...или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много? Можно, если на эту "часть" наложено ограничение уникальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 02:49 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
При создании модели БД по-уму начинают с логической модели, в которой никаких ID (ключей, не имеющих логического смысла) нет. Судя по всему, у вас должна быть примерно такая логическая структура таблиц: Код: plaintext 1. 2. 3. Если вы поклонник Джо Селко, то физическая структура должна быть такой-же. А если хотите разработать систему, которая будет реально работать, то в физической модели необходимо добавить id-шники для каждой сущности которые и становятся РК Код: plaintext 1. 2. 3. Поля, которые раньше были РК превращаются в логические ключи и на них навешиваются уникальные индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 04:43 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
StalkerS Код: plaintext 1. 2. 3. Это вроде то же самое получилось, как и у меня. Таблица ТочкиПродукты содержит составной ключ связанный с первичными ключами из других таблиц. Я в первом посте спрашивал "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным" и мне ответили что ДА, но тут-то получается, что составной ключ из таблицы ТочкиПродукты не входит в состав других таблиц как составной, а входит по частям. И какая тут связь получается между таблицами, 1-1 или много-1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 13:33 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
bukinatorЭто вроде то же самое получилось, как и у меня. Таблица ТочкиПродукты содержит составной ключ связанный с первичными ключами из других таблиц. Я в первом посте спрашивал "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным" и мне ответили что ДА, но тут-то получается, что составной ключ из таблицы ТочкиПродукты не входит в состав других таблиц как составной, а входит по частям. И какая тут связь получается между таблицами, 1-1 или много-1 ? я не знаю как там у вас именно получилось, т.к. не могу понять смысл " я сделал таблицу "точки" в которой первичный ключ="id_point" и таблицу "продукты" в которой первичный ключ = составной ключ "id_point"+"type_product", и ключ "id_point" из первой таблицы связан с ключем "id_point" из второй таблицы ", поэтому написал как примерно это может выглядеть Таблицы Точки, ТипыПродуктов и Продукты имеют РК из одного столбца, который мигрировал в таблицу ТочкиПродукты. Про какой составной мигрирующий ключ вы тут говорите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 14:50 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
StalkerS Про какой составной мигрирующий ключ вы тут говорите? StalkerSТочки (ID int PK, Название varchar) ТипыПродуктов (ID int PK, Название varchar) Продукты (ID int PK, Название varchar, IDТипa int) ТочкиПродукты (IDТочки, IDПродукта) PK = IDТочки + IDПродукта Вот тут в таблице ТочкиПродукты ключ составной. Я спрашивал, "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным"? мне сказали, что обязательно, хотя в вашем примере составной ключ из таблицы ТочкиПродукты не входит в другие таблицы целиком как составной, а входит по частям (в таблицу Точки входит часть IDТочки,в таблицу Продукты входит часть IDПродукта). Хотя в данном случае непонятно, где здесь внешний ключ, или здесь вообще нет внешнего ключа, а таблицы связаны внутренними ключами. Вообще , проблема возникла после того, как я делал схему базы данных в проге DBDesignerFork , и когда я связывал таблицы между собой, эта прога автоматически вставляла весь составной ключ в взаимосвязанные таблицы. вот тут скрин http://s003.radikal.ru/i204/1005/1c/ea6fac252051.png , в таблицу Points автоматически вставилась Products_Points_product_type из таблицы Products_Points после того, как я связал эти 2 таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 15:36 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
Вы описываете стандартную реализацию связи 'многие-ко-многим'. Пользуясь Вашей терминологией: - Таблица 'Точки' (ID точки (PK), наименование) - Таблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица - Таблица 'Типы продуктов' (ID типа продукта (PK), наименование) Ваша ошибка в том, что таблицы 'Точки' и 'Типы продуктов' должны быть родительские, 'ПродуктыТочки' - дочерняя, а на Вашей схеме - изображено как раз наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 16:40 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
Золотая рыбка - Таблица 'Точки' (ID точки (PK), наименование) - Таблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица - Таблица 'Типы продуктов' (ID типа продукта (PK), наименование)а какой тут тип связи получается, 1 ко многим? и еще может быть в таблице 'Типы продуктов' не так Золотая рыбкаТаблица 'Типы продуктов' (ID типа продукта (PK), наименование)) а вот так Таблица 'Типы продуктов' (ID типа продукта, наименование (PK))) то есть чтобы ключем был не ID типа продукта, а другое поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 17:15 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
и есть разница между такой таблицейЗолотая рыбкаТаблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица и такой Золотая рыбкаТаблица 'ПродуктыТочки' (ID_развязки (PRIMARY KEY), ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) ) - развязочная таблица? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2010, 17:22 |
|
||
|
составной первичный ключ как внешний
|
|||
|---|---|---|---|
|
#18+
bukinatorВот тут в таблице ТочкиПродукты ключ составной. Я спрашивал, "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным"? мне сказали, что обязательно, хотя в вашем примере составной ключ из таблицы ТочкиПродукты не входит в другие таблицы целиком как составной, а входит по частям (в таблицу Точки входит часть IDТочки,в таблицу Продукты входит часть IDПродукта). Не составной ключ из таблицы ТочкиПродукты входит по частям в другие таблицы, а РК из других таблиц входит в первичный ключ таблицы ТочкиПродукты. РК родительской таблицы должен мигрировать полностью в другие таблицы (и не важно, оказывается он там в первичном ключе или нет), другое дело, если вы впихнули в первичный ключ избыточные столбцы (у вас РК был "id_point"+"type_product" ), это ошибка, т.к. id_point уже уникально идентифицирует запись Связь в ТочкиПродукты многие ко многим Вообще, если используете искуственный ключ, то именно он должен быть РК и мигрировать должен тоже только он один, никакие другие столбцы к нему не прицепляются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2010, 06:15 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36653638&tid=1542683]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 493ms |

| 0 / 0 |
