Вниз
Скачать: CL | DM;

Составноей ЕК (первичный) и автоинкрементый СК (связи)   Найти похожие ветки 

← →
Некто ©   (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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
15-1150699761
QuickFinder
2006-06-19 10:49
2006.07.23
Алгоритмы сжатия и шифрования


4-1144643472
ponyol
2006-04-10 08:31
2006.07.23
Проблема с переключением языка в XP


2-1152087609
myke
2006-07-05 12:20
2006.07.23
For loop control variable must be simple local variable


2-1151690183
resuS
2006-06-30 21:56
2006.07.23
русский язык в консольном приложении


9-1132171945
2Wish
2005-11-16 23:12
2006.07.23
UndelphiX




   Наверх