Использование одних и тех же первичных ключей в нескольких таблицах - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в создании базы данных с нуля в postgres.

Для пользователя, регистрирующегося на веб-сайте, две сущности - это «пользователь» (их данные) и «пользователь_pswrd» (для сохранить пароль пользователя (который в конечном итоге будет зашифрован).

Мой вопрос заключается в том, должен ли я создать один и тот же первичный ключ в обеих таблицах:

CREATE TABLE user (user_name VARCHAR PRIMARY KEY,
                   first_name VARCHAR,
                   surname VARCHAR,
                   email VARCHAR);

CREATE TABLE user_pswrd (user_name VARCHAR PRIMARY KEY,
                         pswrd VARCHAR)

или первичный ключ в 'user' и просто укажите внешний ключ в 'user_pswrd':

CREATE TABLE user (user_name VARCHAR PRIMARY KEY,
                   first_name VARCHAR,
                   surname VARCHAR,
                   email VARCHAR);

CREATE TABLE user_pswrd (pswrd VARCHAR,
                         FOREIGN KEY(user_name) REFERENCES user(user_name))  

Если ни один из них не верен, любой совет будет оценен.

1 Ответ

1 голос
/ 21 апреля 2020

У вас есть две отдельные таблицы. Вы должны иметь автоматические c первичные ключи и использовать их для их соединения:

CREATE TABLE users (
    user_id int generated always as identity primary key,  -- in older versions, "serial"
    user_name VARCHAR unique,
    first_name VARCHAR,
    surname VARCHAR,
    email VARCHAR
);

CREATE TABLE user_password (
    user_id int primary key,
    password varchar,
    foreign key (user_id) references users(user_id)
 );

Примечания:

  • Нет причин хранить пароль в отдельной таблице, если только у вас есть деловая причина для этого. Похоже, что это отношение 1-1.
  • Вы НИКОГДА не должны хранить незашифрованный пароль в своем приложении. Фактически, ваше приложение никогда не должно видеть такой пароль. Шифрование должно быть на стороне клиента.
  • Мне неудобно оставлять длины varchar, но Postgres поддерживает это.
  • Нет причин портить имя что-то вроде «пароля». Просто введите все слово. В современном мире нет никаких преимуществ использования "pswrd".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...