ISBN используются в качестве первичного ключа, теперь я хочу добавить не-книжные вещи в БД - я должен перейти на EAN?
Я создал базу данных инвентаризации, где номера ISBN являются первичными ключами для предметов. Какое-то время это прекрасно работало, поскольку предметы были книгами. Теперь я хочу добавить не книги. у некоторых не-книг есть EAN или ISSN, у некоторых нет.
Он находится в PostgreSQL с приложениями django для внешнего интерфейса и JSON API, а также с несколькими поддерживающими инструментами командной строки python для управления. Речь идет в основном о книгах и печатных изданиях художников, некоторые из которых публикуются самостоятельно.
Что хорошо в использовании ISBN в качестве первичных ключей, так это то, что в дополнение к реляционной целостности вы получаете множество удобных утилит для проверки ISBN, автоматического поиска отсутствующей или дополнительной информации по элементам книги, и так далее, многими из которых я воспользовался, некоторые такие инструменты уже в продаже (PyISBN, PyAWS и т. д.), а некоторые - ручные - я пытался держать все эти части красивыми и отделенными, но вы знаете, как все может получиться.
Я не мог найти в Интернете ничего о "частных ISBN" или "самостоятельно назначенных ISBN", но я заинтересовался этим. Я сомневаюсь, что это то, на чем я остановлюсь, так как уже есть очевидный прогон номеров ISBN.
я должен переоборудовать все для номеров EAN или вообще перенести ISBN в качестве первичных ключей? если у кого-то есть опыт работы с этими системами, я хотел бы услышать об этом, ваш совет очень приветствуется.
4 ответа
Если вы используете ISBN-10, то вам определенно следует перейти на что-то другое, поскольку это уже устарело. Вы можете легко взять ISBN-10 и превратить их в ISBN-13 (см. Википедию), которые, как мне кажется, совместимы с EAN (опять же, смотрите википедию), но, как предполагает the_lotus, вероятно, лучше иметь какое-то целое с автоматическим приращением без внешнего значения в качестве первичного ключа и последующего индексирования по EAN/ISBN/ и т. д.
Я не знаю postgres, но обычно ISBM будет уникальным индексным ключом, но не основным. Лучше иметь целое число в качестве первичного / внешнего ключа. Таким образом, вам нужно только добавить новое поле EAN/ISSN как обнуляемое.
Я согласен с the_lotus, не в последнюю очередь потому, что ISBN - плохой выбор для первичного ключа
Данные мудрые, они могут быть недостаточно уникальными. Если кластеризован, он довольно широкий и не числовой
Простым решением (хотя, возможно, и хорошим) будет использование (isbn,title) или (isbn,author), которое должно в значительной степени гарантировать уникальность. Идеология прекрасна, но практичность также служит цели.