проблема с настройкой первичных ключей в базе данных mysql ... помогите? - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть таблица, настроенная для базы данных mysql, которая называется «доступ» с тремя столбцами:

rights_id, (ПЕРВИЧНЫЙ КЛЮЧ)

имя пользователя

имя

В столбце rights_id пользователь может ввести только 3 различных значения («1», «2» или «3») 1 означает ресурс, 2 означает менеджер и 3 означает администратор. Моя проблема возникает, когда существует несколько строк с одинаковыми правами_идентификатора (т. е. более одного администратора). Оно отображает ошибку, которая говорит мне, что у меня не может быть повторяющейся записи для ПЕРВИЧНОГО КЛЮЧА ... мне было интересно, есть ли был способ подавить эту ошибку и позволить мне сделать это? Я использую vb.net для взаимодействия с моей базой данных MYSQL, работающей на ОС Windows 7. Спасибо!

Ответы [ 4 ]

2 голосов
/ 11 сентября 2011

rights_id является первичным ключом.Вы можете иметь только различные значения первичных ключей в таблице.Поэтому рассмотрите другой первичный ключ или не используйте столбец rights_id таким образом.Вам следует больше узнать о реляционных базах данных, если вы хотите их использовать.

На мой взгляд, лучшее решение - добавить еще один столбец id, который может быть первичным ключом (вы также можете установить несколько столбцов).первичный ключ, но, по моему мнению, это не соответствует вашим данным).

1 голос
/ 11 сентября 2011

Я не уверен, что означает «имя» в этой таблице.Если это безопасно для меня, игнорировать это.,.

Если у каждого имени пользователя может быть только один "rights_id", то первичным ключом должно быть имя пользователя.Если у каждого имени пользователя может быть более одного «rights_id» - если у пользователя Catcall одновременно могут быть и Rights_id 1 и 2, то вашим первичным ключом должна быть пара столбцов (rights_id, username).

Поскольку MySQL не применяет ограничения CHECK, у вас должна быть отдельная таблица номеров идентификаторов прав, содержащая три строки.

create table rights_ids (
  rights_id integer primary key
);
insert into rights_ids values (1);
insert into rights_ids values (2);
insert into rights_ids values (3);

Затем вы можете установить ограничение внешнего ключа, которое будет препятствовать появлению любых чисел, кроме этих трех, в таблице с именем "access".Что-то вроде

alter table access
add constraint foreign key (rights_id) references rights_ids (rights_id);
1 голос
/ 11 сентября 2011

Создайте состав PRIMARY KEY из rights_id и username (если имена пользователей уникальны).

0 голосов
/ 11 сентября 2011

Нет, вы не можете подавить эту ошибку. Проблема в том, что rights_id НЕ является вашим первичным ключом.

Первичный ключ должен иметь возможность уникально идентифицировать строку в вашей таблице. Если вы можете иметь более 1 rights_id записи, то это НЕ сможет выполнять роль первичного ключа.

Чтение этой вики-статьи об уникальных ключах (первичный ключ - это особый тип уникального ключа).

Как указал Шеф, вы, вероятно, захотите использовать составной первичный ключ rights_id и username, если эта комбинация фактически однозначно идентифицирует одну строку в таблице.

...