MYSQL: два поля как ПЕРВИЧНЫЕ КЛЮЧИ + 1 поле как УНИКАЛЬНОЕ, вопрос

У меня есть два первичных (составных) ключа, которые относятся к магазину и филиалу. Я подумал, что мне следовало использовать соответствующий идентификатор для каждой строки, поэтому я добавил UNIQUE + AUTO_INCREMENT с именем ID.

Итак, у меня в таблице был столбец с именем ID (AUTO INCREMENT), но он был объявлен ПЕРВИЧНЫМ, что было сделано автоматически, и я не хочу, чтобы ID был ПЕРВИЧНЫМ. Просто магазин и филиал.

Я узнал, как обмануть MYSQL, чтобы он принял поле идентификатора как УНИКАЛЬНОЕ и АВТОМАТИЧЕСКОЕ УВЕЛИЧЕНИЕ, поскольку было нетривиально сделать AUTO_INCREMENT (он хотел сделать его ПЕРВИЧНЫМ). Мне пришлось УДАЛИТЬ поле идентификатора (по какой-то причине оно не позволило мне стереть его ПЕРВИЧНЫЙ индекс), затем объявить его ИНДЕКС, и только потом АВТО УВЕЛИЧЕНИЕ.

Это хороший подход? Могу ли я что-то сделать не так с этим дизайном?

Спасибо !!!


person Ted    schedule 27.06.2011    source источник
comment
Какой смысл иметь идентификатор автоинкремента, который не является первичным ключом? Более короткие первичные ключи лучше, а в InnoDB есть преимущества в использовании автоинкремента в качестве первичного ключа.   -  person Maxim Krizhanovsky    schedule 27.06.2011


Ответы (2)


Преобладает мнение, что каждая таблица должна иметь уникальный столбец с автонумерованием с именем Id.

В классическом моделировании данных, разработанном Коддом и Дейтом, поле идентификатора не обязательно для полной логической модели данных.

Какая польза от поля ID? Вы когда-нибудь ссылались на строку в этой таблице по ее идентификатору? Если нет, просто оставьте поле вне поля зрения. (магазин, филиал) предоставил прекрасного кандидата на роль ПК.

person Walter Mitty    schedule 27.06.2011
comment
Спасибо !! Думаю, я просто продолжу - person Ted; 28.06.2011
comment
тесто ... :) Думаю, просто пойду и сделаю две таблицы. Одна будет таблицей компаний, а другая - таблицей ветвей, где ссылка будет от филиалов к компаниям. в ветвях я создам третий ключ, который будет уникальным, это business_id, и с ним я буду работать по всей схеме. Это звучит достаточно разумно? - person Ted; 28.06.2011

Как выглядело ваше create table заявление? Потому что я себе это представляю:

CREATE TABLE foo (
    IDCol int not null auto_increment,
    shop int not null,
    branch int not null,

    /* ... */

    UNIQUE KEY IDCol (IDCol),
    PRIMARY KEY (shop, branch)
);
person Dereleased    schedule 27.06.2011
comment
Я должен сказать, что использовал для этого phpMyAdmin, и я не вел записи об этом. - person Ted; 27.06.2011
comment
Поскольку я делал шаги, которые я имел в виду ранее, для всех моих других таблиц, похоже, нет проблем, т.е. УДАЛИТЬ ID, добавить еще раз, объявить УНИКАЛЬНЫМ и только потом АВТО УВЕЛИЧЕНИЕ - person Ted; 27.06.2011
comment
Похоже, вы обманываете phpMyAdmin, заставляя его делать то, что вы хотите, а не MySQL. Я не знаю никаких уловок phpMyAdmin, чтобы заставить его делать то, что вы хотите, кроме простого написания CREATE запроса вручную. Удачи. - person Dereleased; 27.06.2011