Ваша текущая реализация выглядит как нормализованная.Вы уверены, что вам нужно хранить данные в двух разных таблицах?Может быть
CREATE TABLE posts
(
post_id int(11) unsigned NOT NULL AUTO_INCREMENT,
title varchar(255),
info varchar(255),
PRIMARY KEY(post_id)
) ENGINE=InnoDB
подойдет?
Предположение: если вы делаете это таким образом из-за проблем безопасности, тогда MySQL поддерживает привилегии уровня столбца .
Если нормализация ваших данных по некоторым причинам неприемлема, тоВы можете просто сделать post_id
первичный ключ в обеих таблицах (не делайте его внешним ключом!) и добавить триггеры INSERT и DELETE в таблицу posts
, которые будут вставлять или удалять соответствующие строки из post_meta.
ОБНОВЛЕНИЕ
Вы сказали в комментарии, что в таблице post_meta
может быть несколько записей, соответствующих одной записи в posts
.Это меняет много :
- Вы НЕ ДОЛЖНЫ использовать первичный ключ для
post_id
в таблице post_meta
.Первичный ключ ДОЛЖЕН быть уникальным в области таблицы. - Вы можете настроить свой внешний ключ (тот, который вы уже пытались) - это обеспечит автоматическое удаление метаданных с сообщениями.
- Если вам нужен PRIMARY KEY, определенный в
post_meta
затем вы должны добавить новое (возможно, поле auto_increment) в таблицу post_meta
и использовать его в качестве первичного ключа.(Кроме того, таблица может существовать даже без первичного ключа, но это противоречит большинству рекомендаций БД) - Если вам нужно автоматически создавать мета-записи для каждого сообщения, вы можете добавить триггер INSERT для
posts
какЯ уже предложил.Другой подход заключается в использовании хранимой процедуры (и только хранимой процедуры) для добавления записей в posts
- и в этом SP вы можете написать SQL для вставки необходимых записей в post_meta
.