Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
ВнизСоставноей ЕК (первичный) и автоинкрементый СК (связи) Найти похожие ветки
← →
Некто © (2006-05-19 13:26) [0]Хотелось бы, чтобы уникальность записи проверялась на уровне связки "серия паспорта" и "номер паспорта", а связь с другими таблицами по автоинкрементному полю "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?
← →
Johnmen © (2006-05-19 13:29) [1]Создать уникальный индекс на эти два поля.
← →
Sergey13 © (2006-05-19 13:29) [2]>ЕК...СК
Что за сокращения?
>а связь с другими таблицами по автоинкрементному полю "id".
Почему тогдаPRIMARY KEY(`ser_pas`, `num_pas`)
?
← →
Johnmen © (2006-05-19 13:31) [3]
> Как обойти такое ограничение mysql?
> в ib/fb?
Это не ограничение, а базовая концепция.
← →
Некто © (2006-05-19 13:35) [4]
> Johnmen © (19.05.06 13:29) [1]
>
> Создать уникальный индекс на эти два поля.
Супер! Я забыл про возможность UNIQUE INDEX `idx`(`ser_pas`, `num_pas`).
Псибки, наставили на путь истинный. :)
← →
Некто © (2006-05-19 13:36) [5]
> Sergey13 © (19.05.06 13:29) [2]
>
> >ЕК...СК
> Что за сокращения?
Ну вы недавно насчёт естественных и суррогатных ключей с Игорем Шевченко спорили. ЕК и СК. :)
← →
Sergey13 © (2006-05-19 13:39) [6]2[5] Некто © (19.05.06 13:36)
А-а-а! 8-)
← →
Desdechado © (2006-05-19 13:58) [7]я бы сделал UNIQUE CONSTRAINT вместо UNIQUE INDEX
суть та же, но выглядит серьезнее :)
← →
Johnmen © (2006-05-19 14:02) [8]
> Desdechado © (19.05.06 13:58) [7]
В MySQL это несколько иное и по-другому.
← →
Desdechado © (2006-05-19 14:07) [9]Johnmen © (19.05.06 14:02) [8]
отход от стандарта?
← →
Johnmen © (2006-05-19 14:26) [10]
> Desdechado © (19.05.06 14:07) [9]
Я бы сказал, некоторая модификация...
← →
Desdechado © (2006-05-19 15:29) [11]да, по сабжу автору
PRIMARY KEY(ID) сделай
а то поле хоть и автоинкрементное, но ссылаться на него нельзя, если не поставишь PK
← →
Johnmen © (2006-05-19 15:32) [12]
> Desdechado © (19.05.06 15:29) [11]
> а то поле хоть и автоинкрементное, но ссылаться на него
> нельзя, если не поставишь PK
Почему?
← →
Desdechado © (2006-05-19 15:58) [13]по стандарту - или PK, или UQ
на другие FK не сделать
или и здесь своя интерпретация?
← →
Johnmen © (2006-05-19 16:04) [14]Да не знаю я. Чисто теоретически помех нету.
Если отсутствие ПК приводит к ошибке создания ссылочного констрейнта, то это фича конкретного сервера...
← →
Некто_ (2006-05-19 16:53) [15]ID будет AUTO_INCREMENT, ну значит уникальным.... можно наверно до кучи объявить его как UNIQUE INDEX, хотя смысла этого не вижу, разве что индекс создаётся, но по этому полю он нужен как собаке пятая нога.
← →
Desdechado © (2006-05-19 16:57) [16]> по этому полю он нужен как собаке пятая нога
а поле тогда зачем?
обычно PK (ID) создается для связи с другими таблицами, а по индексу это в разы быстрее
если у тебя связывать не с чем, на кой тогда ID ?
← →
Некто_ (2006-05-19 17:15) [17]Ой. Именно в этой таблице нужен. Просто когда писал 15 пост, то думал о другой заморочке. Сорри. =)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c