Может ли один столбец в таблице ссылаться на несколько таблиц?MYSQL - один столбец, ссылающийся на несколько таблиц
ответ
Если вы имеете в виду «может ли столбец в одной таблице использоваться в качестве внешнего ключа в нескольких таблицах», тогда ответ ДА. В этом весь смысл реляционной базы данных
Я имею в виду, что «столбец может ссылаться на несколько других таблиц» – rechie
Да, вы можете это сделать. вот пример того, как сделать это:
Вот таблица, которая имеет столбец (CountryId), который будет ссылаться на несколько таблиц:
CREATE TABLE DLAccountingSystem.tblCountry
(
CountryID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
CountryName VARCHAR(128) NOT NULL,
LastEditUser VARCHAR(128) NOT NULL,
LastEditDate DATETIME NOT NULL
) ENGINE=INNODB;
Ниже приведены таблицы, которые собирается ссылаться на колонка (CountryId):
CREATE TABLE DLAccountingSystem.tblCity
(
CityID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
CountryID INT NOT NULL,
CityName VARCHAR(128) NOT NULL,
LastEditUser VARCHAR(128) NOT NULL,
LastEditDate DATETIME NOT NULL
) ENGINE=INNODB;
CREATE TABLE DLAccountingSystem.tblProvince
(
ProvinceID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
CountryID INT NOT NULL,
ProvinceName VARCHAR(128) NOT NULL,
LastEditUser VARCHAR(128) NOT NULL,
LastEditDate DATETIME NOT NULL
) ENGINE=INNODB;
Вот как вы создаете ссылку на столбец:
ALTER TABLE DLAccountingSystem.tblCity
ADD CONSTRAINT fk_tblcitycountryid FOREIGN KEY CountryID (CountryID)
REFERENCES DLAccountingSystem.tblCountry (CountryID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
ALTER TABLE DLAccountingSystem.tblProvince
ADD CONSTRAINT fk_tblprovincecountryid FOREIGN KEY CountryID (CountryID)
REFERENCES DLAccountingSystem.tblCountry (CountryID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
вот таблица, в которой есть столбец, который ссылается на разные столбцы из нескольких таблиц (CountryID, ProvinceID, CityID) (я лично не консультирую этот метод структурирования таблицы. Просто мое мнение не обижайся;))
CREATE TABLE DLAccountingSystem.tblPersons
(
PersonID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
PlaceID INT NOT NULL,
PlaceTypeID INT NOT NULL, -- this property refers to what table are you referencing.
//Other properties here.....
) ENGINE=INNODB;
вы также должны иметь справочную таблицу, которая будет содержать PlaceType:
CREATE TABLE DLAccountingSystem.tblPlaceType
(
PlaceTypeID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
PlaceTypeName INT NOT NULL
//Other properties here.....
) ENGINE=INNODB;
вот как вы запрашиваете его:
SELECT p1.PersonID,
tcity.CityName,
tprov.ProvinceName,
tcoun.CountryName
FROM DLAccountingSystem.tblPersons p1
LEFT JOIN (SELECT p2.PersonID, p2.PlaceTypeID, c.CityName FROM DLAccountingSystem.tblPersons p2 INNER JOIN DLAccountingSystem.tblCity c ON p2.ObjectID = c.CityID WHERE PlaceTypeID = @CityTypeID) tcity ON p1.PersonID = tcity.PersonID
LEFT JOIN (SELECT p2.PersonID, p2.PlaceTypeID, c.ProvinceName FROM DLAccountingSystem.tblPersons p2 INNER JOIN DLAccountingSystem.tblProvince c ON p2.ObjectID = c.ProvinceID WHERE PlaceTypeID = @ProvinceTypeID) tprov ON p1.PersonID = tprov.PersonID
LEFT JOIN (SELECT p2.PersonID, p2.PlaceTypeID, c.CountryName FROM DLAccountingSystem.tblPersons p2 INNER JOIN DLAccountingSystem.tblCountry c ON p2.ObjectID = c.CountryID WHERE PlaceTypeID = @CountryTypeID) tcoun ON p1.PersonID = tcoun.PersonID
вас можно выбрать из других таблиц, таких как
Я имею в виду, что «столбец может ссылаться на несколько других таблиц» – rechie
да, это также возможно. но было бы очень сложно поддерживать реляционную целостность при реализации этого. У нас есть что-то подобное в нашей базе данных, используемой для уведомлений. Можете ли вы, пожалуйста, дать мне точный набор? –
Один и тот же столбец или набор столбцов могут выступать в роли родителя и/или в качестве дочернего конечной точки внешнего ключа или внешних ключей.
- 1. PostgreSQL - внешний ключ, ссылающийся на несколько таблиц
- 2. EF4 - внешний ключ, ссылающийся на несколько таблиц
- 3. выпадающий список, ссылающийся на несколько таблиц данных
- 4. MySQL-запросы на несколько таблиц
- 5. Объедините несколько уникальных таблиц MySQL и закажите один столбец
- 6. Взяв один столбец из объединенных таблиц MySQL
- 7. Webquery несколько таблиц в один столбец
- 8. внешний ключ, ссылающийся на несколько таблиц - с использованием нескольких FK
- 9. Добавить столбец, ссылающийся на столбец идентификации
- 10. Один столбец, который упорядочен и разделен на несколько таблиц?
- 11. Объединение двух таблиц MySQL на один общий столбец
- 12. Несколько таблиц или один большой (MySQL)
- 13. MySQL объединяет несколько строк в один столбец
- 14. Вставить несколько строк в один столбец mysql
- 15. Automake, ссылающийся на несколько PROGRAMS
- 16. MySQL: несколько таблиц (один раз все столбцы, три раза только один столбец)
- 17. Запрос MySQL на несколько таблиц
- 18. MySQL; Разделите один столбец на несколько столбцов, ежедневно меняйте данные
- 19. Mysql несколько таблиц выберите
- 20. Один контроллер Несколько таблиц
- 21. pandas создать столбец, ссылающийся на себя
- 22. MySQL раскол один столбец
- 23. Один столбец отображает несколько столбцов из разных таблиц
- 24. Объединение двух таблиц - несколько столбцов в один столбец
- 25. Mysql несколько таблиц
- 26. UPDATE один столбец из нескольких таблиц сразу
- 27. получить один столбец mysql
- 28. MySQL Несколько таблиц Ссылка
- 29. Несколько таблиц Mysql JOIN
- 30. разделить один столбец на несколько именованных столбцов
Удостоверьтесь, что столбец может быть привязан к нескольким другим таблицам в качестве внешнего ключа или что столбец может ссылаться на несколько других таблиц, как в нескольких ограничениях внешнего ключа на один столбец? –
Ничто не мешает вам создавать множественные ограничения внешнего ключа. Хотя я не могу придумать, почему это должно быть необходимо. –
@ Майкл. Да, я имею в виду, что «столбец может ссылаться на несколько других таблиц, как на несколько внешних ключей». – rechie