Это правда, что таблице реляционной базы данных нужен первичный ключ.
Но все сводится к определению первичного ключа.Первичный ключ НЕ обязательно является одним целочисленным столбцом, который автоматически увеличивается.
Первичный ключ - это любой столбец или набор из нескольких столбцов, которые могут однозначно идентифицировать каждую строку.В вашем случае комбинация user_id
и address_type
может сделать это (как уже было опубликовано Evert).
Так что если вы сделаете вашу таблицу такой:
CREATE TABLE user_address (
user_id INT NOT NULL,
address_type varchar(10) NOT NULL,
address TEXT NOT NULL,
PRIMARY KEY (user_id, address_type)
);
Тогда выможет обновлять или удалять одну конкретную строку за раз, например, так:
UPDATE user_address SET ...
WHERE user_id = ? AND address_type = ?;
Некоторые люди считают, что удобнее применять соглашение о том, что каждая таблица должна иметь один целочисленный столбец в качестве первичного ключа.Они даже могут настаивать на том, что столбец должен называться id
для согласованности.
В последовательности есть какое-то преимущество, но, с другой стороны, безрассудно настаивать на таком соглашении, даже если оно бесполезно.