Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Составноей ЕК (первичный) и автоинкрементый СК (связи) [MySQL]


Некто ©   (2006-05-19 13:26:00) 

Хотелось бы, чтобы уникальность записи проверялась на уровне связки "серия паспорта" и "номер паспорта", а связь с другими таблицами по автоинкрементному полю "id". Но вот такая ерунда.

#справочник владельцев
CREATE TABLE `owners` (
 `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Код владельца',
 `surname` varchar(50) COMMENT 'Фамилия',
 `name` varchar(50) COMMENT 'Имя',
 `patronymic_name` varchar(50) COMMENT 'Отчество',
 `ser_pas` int(4) NOT NULL COMMENT 'Серия паспорта',
 `num_pas` int(6) NOT NULL COMMENT 'Номер паспорта',
 `address` varchar(150) COMMENT 'Адрес',
 `phones` varchar(30) COMMENT 'Телефоны',
 PRIMARY KEY(`ser_pas`, `num_pas`)
)
CHARACTER SET cp1251 ;

попытка выполнить этот скрипт завершается ошибкой
ERROR 1075 (42000) at line 2: Incorrect table definition; there can be only one auto column and it must be defined as a
key

Самое интересно, что Аксес это проглатывает. На других СУБД это не пробовал, так как под рукой только аксес и мускл.
Как обойти такое ограничение mysql? Пройдёт ли такой фокус в ib/fb?


Некто_   (2006-05-19 17:15:00) [1]

Ой. Именно в этой таблице нужен. Просто когда писал 15 пост, то думал о другой заморочке. Сорри. =)


Desdechado   (2006-05-19 16:57:00) [2]

> по этому полю он нужен как собаке пятая нога
а поле тогда зачем?
обычно PK (ID) создается для связи с другими таблицами, а по индексу это в разы быстрее
если у тебя связывать не с чем, на кой тогда ID ?


Некто_   (2006-05-19 16:53:00) [3]

ID будет AUTO_INCREMENT, ну значит уникальным.... можно наверно до кучи объявить его как UNIQUE INDEX, хотя смысла этого не вижу, разве что индекс создаётся, но по этому полю он нужен как собаке пятая нога.


Johnmen   (2006-05-19 16:04:00) [4]

Да не знаю я. Чисто теоретически помех нету.
Если отсутствие ПК приводит к ошибке создания ссылочного констрейнта, то это фича конкретного сервера...


Desdechado   (2006-05-19 15:58:00) [5]

по стандарту - или PK, или UQ
на другие FK не сделать

или и здесь своя интерпретация?


Johnmen   (2006-05-19 15:32:00) [6]


> Desdechado ©   (19.05.06 15:29) [11]
> а то поле хоть и автоинкрементное, но ссылаться на него
> нельзя, если не поставишь PK


Почему?


Desdechado   (2006-05-19 15:29:00) [7]

да, по сабжу автору
PRIMARY KEY(ID) сделай
а то поле хоть и автоинкрементное, но ссылаться на него нельзя, если не поставишь PK


Johnmen   (2006-05-19 14:26:00) [8]


> Desdechado ©   (19.05.06 14:07) [9]


Я бы сказал, некоторая модификация...


Desdechado   (2006-05-19 14:07:00) [9]

Johnmen ©   (19.05.06 14:02) [8]
отход от стандарта?


Johnmen   (2006-05-19 14:02:00) [10]


> Desdechado ©   (19.05.06 13:58) [7]


В MySQL это несколько иное и по-другому.


Desdechado   (2006-05-19 13:58:00) [11]

я бы сделал UNIQUE CONSTRAINT вместо UNIQUE INDEX
суть та же, но выглядит серьезнее :)


Sergey13   (2006-05-19 13:39:00) [12]

2[5] Некто ©   (19.05.06 13:36)
А-а-а! 8-)


Некто   (2006-05-19 13:36:00) [13]


> Sergey13 ©   (19.05.06 13:29) [2]
>
> >ЕК...СК
> Что за сокращения?

Ну вы недавно насчёт естественных и суррогатных ключей с Игорем Шевченко спорили. ЕК и СК. :)


Некто   (2006-05-19 13:35:00) [14]


> Johnmen ©   (19.05.06 13:29) [1]
>
> Создать уникальный индекс на эти два поля.

Супер! Я забыл про возможность UNIQUE INDEX `idx`(`ser_pas`, `num_pas`).
Псибки, наставили на путь истинный. :)


Johnmen   (2006-05-19 13:31:00) [15]


> Как обойти такое ограничение mysql?
> в ib/fb?


Это не ограничение, а базовая концепция.


Johnmen   (2006-05-19 13:29:00) [16]

Создать уникальный индекс на эти два поля.


Sergey13   (2006-05-19 13:29:00) [17]

>ЕК...СК
Что за сокращения?

>а связь с другими таблицами по автоинкрементному полю "id".
Почему тогда
PRIMARY KEY(`ser_pas`, `num_pas`)
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо