powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Связка таблиц
25 сообщений из 29, страница 1 из 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
25 сообщений из 29, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Связка таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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