Таблица, в которой значения уникальны только по своему id

158
09 марта 2022, 03:30

У меня есть простая таблица, где каждое поле word привязано к значению id (auto increment) из другой таблицы

CREATE TABLE WORDS (ID_USER INT, WORD VARCHAR(30), FOREIGN KEY (ID_USER) REFERENCES USERS (ID));

Можно ли сделать так, чтобы значение word было уникальным только по отношению к его id?

То есть уникальные поля word только для своего id, а между собой с разными id могут повторяться

например, слово 'стек' с id 1 и 'стек' с id 2 могут существовать, но при добавлении 'стек' с id 2 уже нельзя было добавить

Answer 1

Можно наложить unique constraint по двум полям. Но если у вас одно и тоже слово может встречаться у разных пользователей то получается связка многие ко многим - используйте связку через таблицу. Так вы не будете дублировать одно и то же слово для разных пользователей. Например:

users(user_id, ...)
words(word_id, word)
users_words( user_id, word_id)
Answer 2

Можно добавить новую колонку в words и определить ее как PK, а на остальные две колонки наложить unique constraint. Тогда у тебя будет две таблицы со связью 1 ко многим

create or replace table USER
(
    USER_ID  int auto_increment primary key,
    username varchar(32) not null,
    constraint user_username_uindex
        unique (USERNAME)
);
create or replace table WORDS
(
    WORD_ID int auto_increment
        primary key,
    WORD    varchar(32) null,
    USER_ID int         null,
    constraint words_word_user_id_uindex
        unique (WORD, USER_ID),
    constraint words_user_user_id_fk
        foreign key (USER_ID) references USER (USER_ID)
);
Answer 3

а он и не добавится.
колонка id должна быть PRIMARY KEY (id) в USERS он не может повторяться.

если нужен контрольный в голову, то можно завести в таблице ещё ключ- уникальный по сумме двух полей -

CREATE TABLE `WORDS` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`names` VARCHAR(10) NOT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`id`),
UNIQUE INDEX `Индекс 2` (`names`, `id`)

<.поскипано. >

как-то так

READ ALSO
Android cameraX

Android cameraX

Можно ли использовать cameraX в background services? Нашёл пример с camera2 api, но не нашёл ничего подобного для cameraX

171
Не понимаю что будет выведено в консоль?

Не понимаю что будет выведено в консоль?

Что будет выведено в консоль? Дали задание

115
Упаковать jre в exe launch4j

Упаковать jre в exe launch4j

Скажите пожалуйста, возможно ли сделать так: Положить jre в отдельную папку, в launch4j указать путь к этой папке и чтобы при запуске exe-файла jre бралась...

181
Почему jdbc соединение отсоединяется в некоторое время само собой

Почему jdbc соединение отсоединяется в некоторое время само собой

Использую java и jdbc для установки соединения с базой данных

108