powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Связка таблиц
29 сообщений из 29, показаны все 2 страниц
Связка таблиц
    #39775170
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Такой вопрос.
Я связываю допустим 2 таблицы, у меня выводится это таким образом: Скриншот
Можно ли сделать так, вместо цифр чтобы писалось словами?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775178
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Выводите в запросе поля со словами.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775211
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как? У меня там тип int, если ставлю varchar и делаю связку, то ошибка.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775213
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где это "там"?
Показывайте DDL таблиц и проблемный запрос.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775412
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим я заново создаю столбец:
ALTER TABLE `auto` CHANGE `auto_id` `auto_id` INT(11) NOT NULL AUTO_INCREMENT, CHANGE `repair_id` `repair_id` VARCHAR(255) NOT NULL;

Создаю связь:
ALTER TABLE `auto` ADD FOREIGN KEY (`repair_id`) REFERENCES `remont`(`remont_id`) ON DELETE CASCADE ON UPDATE CASCADE;

Ответ MySQL: Документация

#1215 - Невозможно добавить ограничения внешнего ключа
...
Рейтинг: 0 / 0
Связка таблиц
    #39775415
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее не добавляю, изменил тип на varchar
...
Рейтинг: 0 / 0
Связка таблиц
    #39775446
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hypero , Вам же сказали:
vkleПоказывайте DDL таблиц
Выполните
Код: sql
1.
SHOW CREATE TABLE имя_таблицы


для обеих таблиц и скопируйте результат сюда. Тогда будет предмет для разговора...
...
Рейтинг: 0 / 0
Связка таблиц
    #39775507
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таблица auto:
CREATE TABLE `auto` (
`auto_id` int(11) NOT NULL AUTO_INCREMENT,
`marka` varchar(255) NOT NULL,
`model` varchar(10) NOT NULL,
`probeg` int(11) NOT NULL,
`color` varchar(255) NOT NULL,
`client_id` int(11) NOT NULL,
`id_master` int(11) NOT NULL,
`repair_id` varchar(255) NOT NULL,
PRIMARY KEY (`auto_id`),
KEY `client_id` (`client_id`),
KEY `id_master` (`id_master`),
KEY `repair_id` (`repair_id`),
CONSTRAINT `auto_ibfk_1` FOREIGN KEY (`client_id`) REFERENCES `clients` (`client_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `auto_ibfk_2` FOREIGN KEY (`id_master`) REFERENCES `masters` (`master_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8


таблица remont:
CREATE TABLE `remont` (
`remont_id` int(11) NOT NULL AUTO_INCREMENT,
`auto_id` int(11) NOT NULL,
`breaking` varchar(255) NOT NULL,
`price` varchar(10) NOT NULL,
`date_in` date NOT NULL,
`date_out` date NOT NULL,
PRIMARY KEY (`remont_id`),
KEY `auto_id` (`auto_id`),
KEY `remont_id` (`remont_id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
Связка таблиц
    #39775564
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-о-от...

И сразу видна ошибка. Это таблица ремонта должна ссылаться на таблицу машин, а не наоборот. Ремонтируешь-то ты вполне определённую машину. Т.е. то, какая ремонтируется машина - это одна из характеристик любого отдельно взятого ремонта.
Код: sql
1.
ALTER TABLE remont ADD FOREIGN KEY (auto_id) REFERENCES auto (auto_id);
...
Рейтинг: 0 / 0
Связка таблиц
    #39775589
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭто таблица ремонта должна ссылаться на таблицу машин, а не наоборот.

Она и ссылается на таблицу машин. Просто столбцы одинаковые. У таблицы remont - auto_id и у таблицы auto - auto_id.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775594
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял, то запрос должен быть такой?

ALTER TABLE auto ADD FOREIGN KEY (auto_id) REFERENCES remont (auto_id);
...
Рейтинг: 0 / 0
Связка таблиц
    #39775624
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoЕсли я правильно понял У тебя что, в один ремонт сразу несколько машин могут ремонтироваться?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775635
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaУ тебя что, в один ремонт сразу несколько машин могут ремонтироваться?

У меня на одной машине может быть сразу несколько ремонтов.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775637
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня выводится в связанной таблице цифры (скриншот).

Я бы хотел чтобы вместо этих цифр выводились названия прямо в базе данных. Возможно это сделать?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775665
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoУ меня выводится в связанной таблице цифры (скриншот).

Я бы хотел чтобы вместо этих цифр выводились названия прямо в базе данных. Возможно это сделать?Где текст запроса, которым Вы выбирате данные? Найдите его и замените имя поля с числом (`repair_id`, если речь о ремонтах) на имя поля с текстом (вероятно, `breaking`).
Есть какие-то трудности в изменении текста запроса? Если есть - то напишите, какие именно.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775709
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoУ меня на одной машине может быть сразу несколько ремонтов.Простите, Вы понимаете разницу между терминами "сущность" и "экземпляр сущности"?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775723
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПростите, Вы понимаете разницу между терминами "сущность" и "экземпляр сущности"?

Нет, я ошибся. На каждой машине один ремонт.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775724
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вообще по идее может быть и такое ведь, что у одной машины может быть несколько ремонтов или я не прав?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775734
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleГде текст запроса, которым Вы выбирате данные? Найдите его и замените имя поля с числом (`repair_id`, если речь о ремонтах) на имя поля с текстом (вероятно, `breaking`).
Есть какие-то трудности в изменении текста запроса? Если есть - то напишите, какие именно.

Как раз таки поле breaking у меня в таблице remont .
Насчет запроса: Я хочу чтобы вместо цифр показывались сами слова без запроса - зашел в табличку и сразу видишь слова вместо цифр.

Прикрепил схему связей.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775739
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикрепляю еще скрины 2 связанных таблиц.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775740
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Связка таблиц
    #39775770
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoПрикрепил схему связей.hyperoНа каждой машине один ремонт.А у каждого ремонта только одна машина. Так? Тогда зачем тут две таблицы? В этой схеме, если та же самая машина приехала на ремонт во второй (третий и т.д.) раз, тогда это будет уже новая во всех отношениях машина.

Какой-то "копипаст в экселевском файлике" получается.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775808
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleА у каждого ремонта только одна машина. Так?

Я запутался если честно.
Таблица remont (скриншот).
...
Рейтинг: 0 / 0
Связка таблиц
    #39775862
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoТаблица remont (скриншот).Здесь мы видим, что один и тот же auto_id = 7 ремонтировался дважды. Притом, судя по датам, это разные пришествия одного и того же пациента в сервис.

Значит, автомобиль никак не может ссылаться на ремонт. Автомобили - отдельно, ремонты - отдельно. Не должно быть в схеме связей подобных закольцовок.

Ремонт, в принципе, может напрямую одновременно ссылаться и на автомобиль и на клиента.

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

hyperoПросто столбцы одинаковые. У таблицы remont - auto_id и у таблицы auto - auto_id.Вот и поди ж разбери, где что. Чтобы не путаться самому и не путать других, делайте имена столбцов разными. И, вообще, уделите больше внимания названиям. У вас в таблице только один ремонт или множество ремонтов? В другой таблице только один автомобиль или множество автомобилей? Очевидно, и в том и в другом случае множество сущностей, а значит, следует использовать множественное число в названии таблицы. Например: `users`, `tasks`, `projects`.
Каждая запись таблицы описывает единичный экземпляр сущности. Очевидно, там уже должно быть единственное число.
Каждое поле записи характеризует некоторое свойство сущности. Например, `user_id`, `user_name`, `project_id`, `project_name`, `task_id`, `task_name`, `task_project` или `task_project_id`. При правильном подходе имена полей практически не будут дублироваться, а по имени поля уже понятно, что это такое и откуда взялось.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775896
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleЗдесь мы видим, что один и тот же auto_id = 7 ремонтировался дважды. Притом, судя по датам, это разные пришествия одного и того же пациента в сервис.

Значит, автомобиль никак не может ссылаться на ремонт. Автомобили - отдельно, ремонты - отдельно. Не должно быть в схеме связей подобных закольцовок.

Так у меня же есть еще таблица auto. auto_id в таблице remont это внешний ключ.
Таблица auto (скриншот)
...
Рейтинг: 0 / 0
Связка таблиц
    #39775924
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperoТак у меня же есть еще таблица auto. auto_id в таблице remont это внешний ключ.Ссылка из таблицы ремонтов на таблицу автомобилей (розовая на картинке) вполне понятна. Она ссылается (показывает) на ремонтируемый автомобиль.

Ссылка из таблицы автомобилей на таблицу ремонтов (желтая на картинке)hyperoПрикрепил схему связей.

не понятна. Сможете объяснить суть, смысл, назначение этой ссылки словами? Обыкновенными словами, а не столь любымой Вами наскальной живописью в форме скриншотов.
...
Рейтинг: 0 / 0
Связка таблиц
    #39775937
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleСсылка из таблицы ремонтов на таблицу автомобилей (розовая на картинке) вполне понятна. Она ссылается (показывает) на ремонтируемый автомобиль.

Получается у меня всё логично?
...
Рейтинг: 0 / 0
Связка таблиц
    #39775938
hypero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там у меня есть еще другие таблицы, желтая ссылка как раз таки для них
...
Рейтинг: 0 / 0
Связка таблиц
    #39775995
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hyperovkleЗдесь мы видим, что один и тот же auto_id = 7 ремонтировался дважды. Притом, судя по датам, это разные пришествия одного и того же пациента в сервис.

Значит, автомобиль никак не может ссылаться на ремонт. Автомобили - отдельно, ремонты - отдельно. Не должно быть в схеме связей подобных закольцовок.

Так у меня же есть еще таблица auto. auto_id в таблице remont это внешний ключ.
Таблица auto (скриншот)
Ты сам-то понимаешь что у тебя в таблицах хранится? Судя по всему у тебя связь remont.remont_id=auto.repair_id
Вот смотри свой скриншот: https://www.sql.ru/forum/actualfile.aspx?id=21813685
auto_id=3, repair_id=4
если же посмотреть скриншот https://www.sql.ru/forum/actualfile.aspx?id=21813499
то видно, что для auto_id=3 есть remont_id=3 и remontid=6
А remont_id=4 указан для auto_id=6
Как так?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Связка таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]