ISBN используются в качестве первичного ключа, теперь я хочу добавить не-книжные вещи в БД - я должен перейти на EAN? - PullRequest
2 голосов
/ 09 апреля 2010

Я создал базу данных инвентаризации, где номера ISBN являются первичными ключами для предметов. Какое-то время это прекрасно работало, поскольку предметы были книгами. Теперь я хочу добавить не книги. у некоторых не-книг есть EAN или ISSN, у некоторых нет.

Он находится в PostgreSQL с приложениями django для интерфейса и JSON API, а также с несколькими поддерживающими инструментами командной строки Python для управления. речь идет в основном о книгах и гравюрах художников, некоторые из которых публикуются самостоятельно.

Что хорошо в использовании ISBN в качестве первичных ключей, так это то, что в дополнение к реляционной целостности вы получаете множество удобных утилит для проверки ISBN, автоматически ищущих отсутствующую или дополнительную информацию по элементам книги, и т.д. Мы воспользовались. некоторые такие инструменты уже в продаже (PyISBN, PyAWS и т. д.), а некоторые - ручные - я старался держать все эти части красивыми и отделенными, но вы знаете, как все может получиться.

Я не смог найти в Интернете ничего о «частных ISBN» или «самостоятельно назначенных ISBN», но я заинтересовался этим. Я сомневаюсь, что это то, на чем я остановлюсь, так как уже есть очевидный прогон номеров ISBN.

я должен переоборудовать все для номеров EAN или вообще перенести ISBN в качестве первичных ключей? если у кого-то есть опыт работы с этими системами, я хотел бы услышать об этом, ваш совет очень приветствуется.

Ответы [ 4 ]

3 голосов
/ 09 апреля 2010

Я не знаю postgres, но обычно ISBM будет уникальным индексным ключом, но не основным. Лучше иметь целое число в качестве первичного / внешнего ключа. Таким образом, вам нужно только добавить новое поле EAN / ISSN как обнуляемое.

2 голосов
/ 09 апреля 2010

Я согласен с the_lotus, не в последнюю очередь потому, что ISBN - плохой выбор для первичного ключа

Данные мудрые, они могут быть недостаточно уникальными. Если кластеризован, он довольно широкий и не числовой

Пример

2 голосов
/ 09 апреля 2010

Если вы используете ISBN-10, то вам определенно следует перейти на что-то другое, поскольку это уже устарело. Вы можете легко взять ISBN-10 и превратить их в ISBN-13 (см. wikipedia ), которые, как мне кажется, совместимы с EAN (снова см. wikipedia ), но, как подсказывает the_lotus, вероятно, лучше иметь какое-то целое число с автоинкрементом без внешнего значения в качестве первичного ключа, а затем индексировать его по EAN / ISBN / и т. д.

1 голос
/ 10 апреля 2010

Простым решением (хотя, возможно, и хорошим) будет использование (isbn, title) или (isbn, author), которое должно в значительной степени гарантировать уникальность. Идеология прекрасна, но практичность также служит цели.

...