2012-03-15 3 views
0

Извините за неискушенные термины и методологическую грубость заранее.MySQL - метод для обновления таблицы

Скажем, у меня есть несколько таблиц, как так:

ARTISTS 
artistId | artistName 
     1 | Led Zeppelin 
     2 | Pink Floyd 


ALBUMS 
cdId | artistId | title 
    1 |  1 | Physical Graffiti 
    2 |  1 | Led Zeppelin IV 
    3 |  2 | Wish U Were Here 

Я пытаюсь выяснить, гибкий способ обновления таблицы альбома под пару ситуаций (хотя в реальных таблицах у меня есть, название на самом деле title_id привязан к идентификаторам, хранящимся в отдельной таблице).

i. Если я продам два моих компакт-диска LZ и купите «Дома Святого», я должен просто удалить все существующие записи в ALBUMS, где artistId = 1, и вставить новый как способ «обновления»? Меня беспокоит возможность исчерпать идентификаторы первичного ключа AUTO_INCREMENT, хотя я признаю, что я сомневаюсь, что то, что я имею в виду, будет видеть так много трафика, который неподписанный INT не может обрабатывать, и намного проще реализовать, чем моя текущая запутанная идея (для n новых записей, которые я хочу добавить, ищите первые n из m существующих записей, которые не совпадают, обновляют эти записи и удаляют оставшиеся m - n теперь посторонние записи, которые по крайней мере требуют предварительного подзапрос, чтобы получить AID, если я основываю обновление на «Led Zeppelin»).

i.1. Что делать, если я хочу добавить «HOTH», но удалить «IV»? Должен ли я удалить все существующие записи и добавить их как заново?

ii. Что делать, если я просто хочу исправить опечатку, как в cdId = 2?

ответ

0

Возможно, это article заставляет вас передумать и использовать GUID вместо auto_increment для ваших первичных ключей.

0

I. Лично я никогда не удаляю строки, если могу помочь. Подумайте о добавлении количественного поля для хранения количества экземпляров указанного альбома.

У вас маловероятно, что у вас нет автоинкрементов, но если у вас есть сомнения ... используйте bigint. Вы никогда не будете продавать много альбомов.

I.1 Опять же, удаление таких строк - это плохая практика. Если у вас есть поле количества, увеличьте один, уменьшите значение другого.

II. Исправить опечатку? Как в «UPDATE ALBUMS SET title = 'Led Zeppelin ZOSO' WHERE cdId = 2"?

0

Я бы сохранил ALBUMS в виде списка всех альбомов, сделанных каждым художником, и сделал таблицу OWNAGE, где будут альбомы cdId, которыми вы владеете (или идентификатор пользователя и cdId, или идентификатор пользователя, cdId и количество)

Смежные вопросы