Внешние ключи и InnoDb

Demiurg

Guest
Внешние ключи и InnoDb

Проблема в следующем:
есть каталог сайтов.
имеется таблица с сайтами sites(sites_uid , code , status)
code - некое абстрактное число, уникальное для каждого сайта,
status - статус (опубликован, ожидает просмотра и прочее)

причем для одного сайта может быть 2 записи в таблице с одинаковым code и разным status. Имеется уникальный ключ (code, status).

Теперь, у каждого сайта могут быть прессрелизы табличка pressreleases.

Теперь сам вопрос:
Как связать эти две таблицы и какие констрейнты вешать?

у меня было несколько вариантов:
прессрелизы ссылаются на sites_uid.
минусы - sites_uid не является идентификатора сайта, при изменении статуса придется менять ссылающееся поля.

ссылаться на code
минусы- при удалении записи удаляются все прессрелизы ссылающийся на этот сайт несмотря на то, что сайт может остаться в базе с другим статусом

ссылаться на (code, status)
минусы - в ссылающейся таблице status всегд будет "опубликован" (тк прессрелизы к неопубликованным сайтам нас не интересуют), при обнавлении информации о сайте(запись с статусом "опубликован" удаляется, запис со статусом "ожидает просмотра" апдейтится до "опубликован") прессрелизы опять же удаляются.

Есть у кого нибудь еще идеи ?
заранее спасибо.
 

Falc

Новичок
Очень страная табличка sites(sites_uid , code , status)
Почему у тебя у сайта 2 индефикатора?
 

Falc

Новичок
>>причем для одного сайта может быть 2 записи в таблице с одинаковым code и разным status. Имеется уникальный ключ (code, status).

Т.е. у тебя сайт "опубликован", но при этом еще и "не опубликован". Так?
 

Demiurg

Guest
Пользователи сами могут добавлять и изменять свои сайты, но с пост модерацией.
Когда сайт добавляется он заносится со статусом "ожидает просмотра", когда изменяет - к уже имеющейся записи с этим сайтом добавляется еще одна с тем же code, статусом "ожидает просмотра" и измененными данными.
Таким образом при изменении сайт меняется только при согласии модератора и не пропадает с сайта на время между изменением и согласием модератора.
 

Falc

Новичок
Demiurg
Мне кажется тебе надо сделать табличку sites по другому:
code|name|...

А старую переименовать например в sites_status

И цеплять пресрелизы к первой таблице по коду.
 

Demiurg

Guest
То есть предлагаешь опубликованые сайты хранить в одной таблице а остальные в другой ?
 

Falc

Новичок
Demiurg
Нет, предлагаю сделать сущность "сайты", т.к. твоя таблица sites не отображает данной сущности.
 

Demiurg

Guest
И в этой таблице хранить только сам код ? таблица из 2 полей ?
 

Falc

Новичок
Demiurg
Вообще у сайта может быть много атрибутов, имя, урл может быть еще что-то.
 

Demiurg

Guest
Falc
в том то и дело, что они меняются, я должны иметь возможно существовать в 2 экземплярах. Но ты меня натолкнул на мысль, спасибо.
 
Сверху