Я создал чат приложения и его чат видел SQL выглядеть нижеСделать уникальную ключевую работу со значениями NULL?
chat_seen --table name
--Columns---
from_user | to_id | group_id | unseen_count
Он работает следующим образом: Когда group_id является NULL это означает, что это 12:59 чат, если group_id не нулевой from_user является конечным пользователем который написал сообщение, а to_id - это пользователь, который является членом группы. У меня есть внешний ключ в group_id, и он ссылается на таблицу групп, и у меня есть уникальный ключ для 3 столбцов (from_user, to_id, group_id). Когда group_id имеет значение null, он должен работать, потому что from_user и to_id должен быть уникальным в одном чате, но в групповом чате он должен быть уникальным для group_id, это будет работать, если уникальный ключ работает с NULL VALUES, потому что если он будет работать, он будет считать значения group_id NULL как group_id и для группы NULL from_user и to_id будет уникальным. Я не могу изменить grou p_id на что-либо, потому что у него есть внешний ключ.
Я также хочу достичь этого, если group_id не имеет значения null to_id должен иметь внешний ключ и должен ссылаться на член группы, group_id не равен NULL, он должен ссылаться на user_id в таблице пользователя.
Обновленная версия с примерами
Когда кто-то в сообщении группы записи на сообщение я вставить или обновления (если существует) в chat_seen таблицу для каждого пользователя, это означает, что если группа содержит 20 человек в каждом сообщении я будет обновлять или вставлять 20 столбцов, чтобы уведомить их позже, если они не видят чат. И я обновляю unseen_count для каждого пользователя.
Что мне делать? Любое предложение?
Это не работает (по уважительным причинам). Технически вы можете просто добавить новый столбец с 'group_memberid' и оставить' to_id''null' для групповых чатов, а затем создать уникальный ключ для обеих комбинаций (groupchat и 1-1-chat). С другой стороны, у вас могут быть некоторые проблемы в вашем дизайне (хотя я не знаю вашего db, так что это просто догадка): а) членство в группах может измениться, поэтому внешний ключ в таблице групп может не работать (например, если вы уйдете и воссоединитесь, вы пропустили некоторые сообщения) и b) в групповом чате 'from' обычно не относится к' seen', поэтому, возможно, 'group_id' заменит' from'. – Solarflare
И общий комментарий: немного сложно следовать вашему дизайну и вашим требованиям только от вашего текстового описания. Было бы намного легче следовать, если вы добавите некоторые примеры данных (и ваши другие таблицы, особенно таблица участников группы, будут приятными). И поскольку я не упоминал об этом: стандарт sql определяет поведение уникальных ключей так, как они работают в mysql: если у вас есть «нуль» в ключевом столбце, они не уникальны. – Solarflare
Присвоение некоторого значения NULL, за отсутствующим значением, поэтому неизвестное значение, как правило, полны подводных камней. Это одна из них. Вы пытаетесь сделать NULL означающим нечто иное, чем SQL хочет это означать. –