35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
1

Связь многие к одному/ один к многим

15.02.2015, 22:07. Показов 2981. Ответов 7
Метки нет (Все метки)

Вот не могу понять эти связи, как они действуют.
Например у меня есть две таблицы:
Автомобиль
SQL
1
2
3
4
5
6
7
8
CREATE TABLE car(
    id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(15) NOT NULL,
    model  VARCHAR(15) NOT NULL,
    modification  VARCHAR(5) NOT NULL DEFAULT 'L',
    YEAR INT(4) NOT NULL,
    ownerID INT(2) NOT NULL
);
Владелец
SQL
1
2
3
4
5
6
CREATE TABLE owner(
    ownerID INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    surName VARCHAR(15), 
    name VARCHAR(10), 
    middleName VARCHAR(15)
);
У одного владельца может быть несколько авто, но у авто один владелец.
Как правильно добавлять данные? При добавлении нового владельца, надо ли искать, есть ли такой уже в БД для того чтобы ему присвоить новый автомобиль(2-ой или 3-ий...n-ый)?
Может кто знает хорошие видеоуроки по SQL ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2015, 22:07
Ответы с готовыми решениями:

Связь многие-ко-многим
Здравствуйте. Подскажите, пожалуйста, для организации связи "многие-ко-многим" обязательна...

Связь многие ко многим
Есть 3 таблицы: Таким запросом всё как - бы отлично выводится как мне надо книга и под ней...

Запрос Многие-ко-Многим ( связь большого количества таблиц)
К таблице Application нужно как то прикрепить некоторое оборудование, нужно получить название или...

Обновление данных таблицы на основе запроса (связь многие-ко-многим)
Доброго времени суток, дорогие форумчане. Появилась проблема. Есть у меня таблица sklad ...

7
Эксперт PHP
934 / 692 / 235
Регистрация: 01.02.2015
Сообщений: 1,848
16.02.2015, 00:04 2
Цитата Сообщение от bazJaz Посмотреть сообщение
При добавлении нового владельца, надо ли искать, есть ли такой уже в БД
да надо, обычно делают при регистрации проверяя что данный маил используется
1
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
16.02.2015, 19:18  [ТС] 3
Цитата Сообщение от Poznakomlus Посмотреть сообщение
да надо, обычно делают при регистрации проверяя что данный маил используется
например как сделать это?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
16.02.2015, 19:30 4
SQL
1
SELECT COUNT(1) FROM `table` WHERE `email` = ?
Добавлено через 4 минуты
...только структура сырая и неверная.
Надо еще добавить табличек Как минимум, автомобили (марки, модели, модификации) надо вынести в отдельные таблицы + одну таблицу (car) переквалифицировать в "машины владельцев" (или создать новую), со структурой наподобие такой

car_id model_id modification_id owner_id

А уже потом извлекать с помощью JOIN

...Либо использовать нереляционные СУБД..
1
Эксперт PHP
934 / 692 / 235
Регистрация: 01.02.2015
Сообщений: 1,848
16.02.2015, 22:39 5
Цитата Сообщение от bazJaz Посмотреть сообщение
например как сделать это
Вариант 1. Писать два запроса, первый проверяет есть ли уже маил в базе (маил это индекс везде). Второй запрос вставляет юзера
Вариант 2. маил оригинальный индекс, вставляем в лоб запись если ошибка отлавливаем
Вариант 3. Написать хранимую процедуру(тригер) и переложить все на ее плечи
Поначалу, начни с 1
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
16.02.2015, 22:42 6
вариант 2, 3 - зачем?
З.Ы. Есть INSERT IGNORE / INSERT ON DUPLICATE. Только как тогда сообщение пользователю вывести? Разве что смотреть ответ, сколько записей затронуто.. Имхо, 1 вариант вполне подходит.
1
Эксперт PHP
934 / 692 / 235
Регистрация: 01.02.2015
Сообщений: 1,848
16.02.2015, 22:53 7
Цитата Сообщение от KOPOJI Посмотреть сообщение
Только как тогда сообщение пользователю вывести?
сам же ответил на свой вопрос lastInsertId()
самый лучший здесь 3 вариант сервер все сам сделает и вернет то что нужно
переложить на сторону сервера эту отработку
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.02.2015, 00:31 8
Цитата Сообщение от Poznakomlus Посмотреть сообщение
сам же ответил на свой вопрос lastInsertId()
нет, я говорил не про lastInsertId, а про ответ самого INSERT - он должен возвращать количество добавленных рядов.
Насчет самого лучшего третьего - в сомнениях, что это будет легче для мускула, нежели подсчитать количество рядов (имеется в виду при больших объемах данных). Но проверять нет желания - а без этого и говорить ничего не хочется (ну разве что имхо, и все)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2015, 00:31
Помогаю со студенческими работами здесь

Связь многие к одному
ошибка при создании car, owner уже существует Key column 'ownerID' doesn't exist in table create...

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

Связь многие ко многим
Подскажите пожалуйста. Есть 2 таблицы, объединенные третей для реализации связи "многие-ко многим"...

связь многие ко многим
помогите придумать связь М:N для банка, есть Клиенты,Счета,Сотрудники, Дебиторы, Кредиторы, можно...

Связь многие ко многим
Нужно создать связь в данной работе, сотрудники института занимаются НИР, каждый из них может...

Связь многие ко многим
Подскажите, тут есть связь многие-ко-многим,если да, то где?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru