powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отказ от составного первичного ключа.
25 сообщений из 55, страница 1 из 3
Отказ от составного первичного ключа.
    #40065928
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Подскажите пожлуйста, у меня есть поля.
airline_icao_code
airline_name
airline_call_sign
country_ID.
Первые три поля уникальны. По идее они прекрасно подходят для составного первичного ключа, однако этот же весь составной первичный ключ должен мигрировать в другие таблицы, я хочу избежать множество join в select. Могу ли я добавить сурогатный id, а первые три поля сделать уникальными? Не нарушвет ли это нормализацию?
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065930
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13По идее они прекрасно подходят для составного первичного ключа

Это плохая идея. Они даже для уникального ключа не подходят. И да, суррогатный первичный
ключ на нормализацию никак не влияет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065931
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, То есть сурогатный с ограничением уникальности на три поля неплохое решение, как я понял?
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065932
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще вот один вопрос такой. Как сделать ограничение на то, чтобы поле содержала только верхний регистр?
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13неплохое решение

"Неплохость" решения зависит от его соответствия задаче. Нет задачи - нет оценки решения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065940
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, задача стоит в том, чтобы нормализовать БД. Набор из первых строк представляет собой уникальную идентификацию аэропорта, например
GRO
Grodno airline
GRODNO AIRLINE соответсвуют только одной авиакомпании по ICAO код, поэтому я и подумал, что эти три поля пододйдут для первичного ключа, но PK этой таблицу мигрирует в Полеты, и я не хочу мигрировать такой составной ключ в Полеты, вот и спросил про сурогатный ключ. Мне кажется, что поле страна айти тогда будет зависимть не только от сурогатного, но и от трех остальных полей. Очень надеюясь, что я понятно изложил суть своей проблемы
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065941
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13,

у палки 2 конца
1. миграция
2. лукапы
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065943
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13адача стоит в том, чтобы нормализовать БД.

"Неплохость" решения учебной задачи определяется исключительно преподавателем, её задавшим.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065946
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял то, что лучшего варианта нету, все зависит от задачи. Останавлюсь на сурогатном ключе, чтобы потом не делать три джойна на только на аодну табоицу. Спасибо всем
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065952
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
GRODNO AIRLINE соответсвуют только одной авиакомпании по ICAO код , поэтому я и подумал, что эти три поля пододйдут для первичного ключа

Тогда у тебя тут налицо ФЗ левая сторона которой не является ключом, т.е. нарушение как минимум НФБК.
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065955
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, вылетелело из головы ФНБК, если рассматривать составной ключ, тогда больше склоняюсь с сурогатному и ограничению по уникальности, чтобы не декомпозировать отношение. Спасибо
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065958
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
тогда больше склоняюсь с сурогатному и ограничению по уникальности, чтобы не декомпозировать отношение.

Декомпозировать все равно придется, потому что у тебя будет транзитивная ФЗ: ID -> Код ИКАО -> Авиакомпания. Нарушится 3 НФ.

НФБК похожа на 3 НФ, но немного "нормальнее" и определение проще: "Левая часть любой неприводимой и нетривиальной ФЗ должна быть ключом".
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065969
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
Добрый день. Подскажите пожлуйста, у меня есть поля.
airline_icao_code
airline_name
airline_call_sign
country_ID.
Первые три поля уникальны. По идее они прекрасно подходят для составного первичного ключа, однако этот же весь составной первичный ключ должен мигрировать в другие таблицы, я хочу избежать множество join в select. Могу ли я добавить сурогатный id, а первые три поля сделать уникальными? Не нарушвет ли это нормализацию?


Да, можешь. Нет, не нарушит.
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065971
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, мне сообщением выше написали, что это нарушает 3НФ, хотя я думал, что нет, так как каждое поле зависит от сурагатного. Как вариант, я могу разбить все же на две сущности airline_icao_code => airline_name и airline_icao_code => airline_call_sign, country_ID
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065973
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя делать связь 1 к 1 тоже не хочется, лишний джойн во время запроса
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065979
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, airline_icao_code => airline_name и airline_icao_code => airline_call_sign, country_ID со связью 1 к 1?
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065980
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
Как вариант, я могу разбить все же на две сущности airline_icao_code => airline_name и airline_icao_code => airline_call_sign, country_ID

Вообще, насколько я понимаю смысл полей тебе стоит просто добавить ключ ID и объявить альтернативным ключом (UNIQUE) airline_icao_code. А то и просто ничего не добавлять, а сделать airline_icao_code ключом из одного поля. Как-то так (если на MS SQL):
Код: sql
1.
2.
3.
4.
5.
create table ttt (
  airline_icao_code nvarchar(50) not null primary key,
  airline_name nvarchar(50) not null,
  airline_call_sign nvarchar(50) not null,
  country_ID int not null foreign key reference countries(ID)


или с суррогатом:
Код: sql
1.
2.
3.
4.
5.
6.
create table ttt (
  id int not null identity(1,1)  primary key
  airline_icao_code nvarchar(50) not null unique,
  airline_name nvarchar(50) not null,
  airline_call_sign nvarchar(50) not null,
  country_ID int not null foreign key reference countries(ID)


Можно, в принципе, еще поля name и sign сделать по отдельности уникальными, если это так.

Лично мне с суррогатом нравится намного больше, но в данном случае это скорее дело вкуса.
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065989
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, исходя из данных airline_call_sign тоже уникальный. По идее он тоже может быть альтернативным первичным ключом. Так как как и код и название он уникально идентифицирует афиакомпанию. Если рассматривать такой вариант, то я бы выбрал без сурогатного. Так как пусть имя и airline_call_sign так же уникально идентифицируют авиакомпанию, но по сути оба зависят от кода.
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065992
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, по отдельности я не могу сделать эти поля, может быть только такой вариант для идентификации одной компании 'GRO', 'Grodno','Grodno_comp', других вариантов быть никак не может по стандарту. Каждое из этих полей может быть альтернативным первичным ключом
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40065998
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, получается три альтернативных ключа. Но ограничение уникальности должно быть на 3 поля. От кода точно зависит имя, да и сигн, но они могут быть альтеративными первичными ключами. Что-то я совсем запутался
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40066011
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, неправильно понял про уникальность на каждое поле, да, такой вариант правильнее, но id_ страны зависит не только от id авиакомпании.

Я думаю над таким варинатом решение

create table ttt (
airline_icao_code nvarchar(50) primary key,
airline_name nvarchar(50) not null unique,
airline_call_sign nvarchar(50) not null unique
);

create table tt (
airline_icao_code nvarchar(50) primary key,
country_ID int not null foreign key reference countries(ID)
);
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40066020
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
но id_ страны зависит не только от id авиакомпании.

Но, если
Moneta13
create table tt (
airline_icao_code nvarchar(50) primary key,
country_ID int not null foreign key reference countries(ID)
);

то ИД страны как-раз таки зависит именно от ИД компании.
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40066024
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, я наверное плохо выражаю свои мысли. Если все сделать в одном отношении, то первые три поля уникальны, и айди страны может зависеть от любого из этих полей. Но, когда я разбил на два отношения, то для себя уже выделил первичный ключ из двух альтернативных, и уже во втором отношении айди страны зависит только от первичного ключа. Может я не понимаю что или усложняю
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40066025
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13
От кода точно зависит имя, да и сигн, но они могут быть альтеративными первичными ключами. Что-то я совсем запутался

А в чем путаница-то? У сущности запросто может быть не один ключ (то, что называется "потенциальные ключи"). Объявление одного из них "primary" это, скорее, просто традиция (в сиквеле он не может быть null и по умолчанию создается в виде кластерного индекса - больше он, фактически, ничем от любого другого unique не отличается).
...
Рейтинг: 0 / 0
Отказ от составного первичного ключа.
    #40066027
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, путаница в айти страны и зависимости ее как от первичного так и от альтернативного ключа
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отказ от составного первичного ключа.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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