Может ли таблица иметь два внешних ключа? - PullRequest
17 голосов
/ 14 марта 2012

У меня есть следующие таблицы (первичный ключ полужирный . Внешний ключ курсив )

Таблица клиентов

  • ID --- Имя --- Баланс --- учётная_запись --- ACCOUNT_TYPE

Таблица категорий счетов

  • ACCOUNT_TYPE ---- Баланс

Таблица сведений о клиенте

  • учётная_запись --- First_Name ---- Last_Name --- Адрес

Могу ли я иметь два внешних ключа в таблице Customer и как я могу реализовать это в MySQL?


Обновлено

Я занимаюсь разработкой системы бухгалтерского учета для конечного проекта.

Категория учетной записи

Тип счета -------------- Баланс

Активы
Обязательства
Equity
Расходы
Доход

Актив

  • Asset_ID ----- Имя актива ---- Баланс ---- Тип учетной записи

дебиторы

  • Receivable_ID ----- Имя получателя ------- Адрес -------- Тел ----- Asset_ID ---- Тип учетной записи

Дебиторская задолженность

  • TRANSACTION_ID ---- Описание ---- Сумма --- Баланс ---- Receivable_ID ---- Asset_ID --- Тип счета

Я нарисовал диаграмму ER (отношение сущностей) с помощью программного обеспечения, и когда я определяю связь, он автоматически добавил несколько внешних ключей , как показано выше. Разве дизайн не звучит достаточно?

Ответы [ 4 ]

26 голосов
/ 24 октября 2013
create table Table1
(
  id varchar(2),
  name varchar(2),
  PRIMARY KEY (id)
)


Create table Table1_Addr
(
  addid varchar(2),
  Address varchar(2),
  PRIMARY KEY (addid)
)

Create table Table1_sal
(
  salid varchar(2),`enter code here`
  addid varchar(2),
  id varchar(2),
  PRIMARY KEY (salid),
  index(addid),
  index(id),
  FOREIGN KEY (addid) REFERENCES Table1_Addr(addid),
  FOREIGN KEY (id) REFERENCES Table1(id)
)
25 голосов
/ 14 марта 2012

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

Подробнее см. Здесь Ограничения FOREIGN KEY

4 голосов
/ 14 марта 2012

Внешние ключи в вашей схеме (на Account_Name и Account_Type) не требуют какой-либо специальной обработки или синтаксиса. Просто объявите два отдельных внешних ключа в таблице Customer. Они, конечно, не составляют составной ключ в каком-либо значимом смысле этого слова.

Существует множество других проблем с этой схемой, но я просто укажу, что обычно не рекомендуется создавать первичный ключ из нескольких уникальных столбцов или столбцов, в которых один функционально зависит от другого. Похоже, что хотя бы один из этих случаев применим к столбцам ID и Имя в таблице Customer. Это позволяет вам создать две строки с одним и тем же идентификатором (с другим именем), что, я думаю, вы не хотите разрешать.

0 голосов
/ 19 июля 2019
CREATE TABLE User (
user_id INT NOT NULL AUTO_INCREMENT,
userName VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
userImage  LONGBLOB NOT NULL, 
Favorite VARCHAR(255) NOT NULL,
PRIMARY KEY (user_id)
);

и

CREATE TABLE Event (
    EventID INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (EventID),
    EventName VARCHAR(100) NOT NULL,
    EventLocation VARCHAR(100) NOT NULL,
    EventPriceRange VARCHAR(100) NOT NULL,
    EventDate Date NOT NULL,
    EventTime Time NOT NULL,
    EventDescription VARCHAR(255) NOT NULL,
    EventCategory VARCHAR(255) NOT NULL,
    EventImage  LONGBLOB NOT NULL,     
    index(EventID),
    FOREIGN KEY (EventID) REFERENCES User(user_id)
);
...