Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Выделение одной главной сущности среди многих / 25 сообщений из 29, страница 1 из 2
21.03.2017, 09:46
    #39423776
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Доброго дня.

В общем есть персона.
Она может иметь несколько телефонных номеров.
Среди них есть 0 или 1 главный номер.

Не хотелось бы к номеру привязывать булевые переменные "is_main" т.к потом прийдётся поддерживать их целостность.
На сколько оправдана схема с промежуточной таблицей(в приложенном файле)?
Если есть примеры разрешения таких ситуаций - буду признателен.

Спасибо за внимание
...
Рейтинг: 0 / 0
21.03.2017, 09:46
    #39423778
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
...
Рейтинг: 0 / 0
21.03.2017, 10:05
    #39423786
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
может быть ситуация когда один телефон связан с двумя персонами, но только для одной он главный?
попробуйте в вашей схеме написать запрос выборки всех телефонов персоны с указанием какой главный.
...
Рейтинг: 0 / 0
21.03.2017, 10:34
    #39423803
Mr.Fontaine
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Не хватает вопроса: "А один телефон может быть привязан к нескольким персонам?"
При утвердительном ответе на этот вопрос становится понятным, что идентификатор персоны в списке телефонов лишний. Тут нужна отдельная таблица
...
Рейтинг: 0 / 0
21.03.2017, 10:42
    #39423816
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
...
Рейтинг: 0 / 0
21.03.2017, 10:44
    #39423817
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Хранить ID главного номера в карточке у персоны.
Проблем с "главнотой" номера у разных персон не будет.
...
Рейтинг: 0 / 0
21.03.2017, 13:43
    #39424055
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17На сколько оправдана схема с промежуточной таблицей
Если ограничиться только такой постановкой задачи, то промежуточная таблица лишняя - достаточно ссылки у персоны на главный номер. Но если речь идёт о серьёзной задаче, а не о курсовой, то постановку стоит прорабатывать куда глубже. Просто для примера, у человека может быть личный мобильный (сохраняется, когда он переходит на ту же работу в другого контрагента), может быть служебный мобильный (отвязывается и остаётся в старой конторе), а может быть рабочий стационарный (стоит в отделе и к нему привязано ещё пять человек).
...
Рейтинг: 0 / 0
21.03.2017, 15:09
    #39424154
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
LSVХранить ID главного номера в карточке у персоны.
+100500
...
Рейтинг: 0 / 0
21.03.2017, 16:01
    #39424216
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17На сколько оправдана схема с промежуточной таблицей(в приложенном файле)?


ИМХО -я бы не стал городить лишнюю таблицу с таким маленьким функционалом.
Варианта два на выбор:
1. признак главного номера в списке телефонов - и при изменениях контролировать признак
2. притянуть связь из телефонов в персону - он и будет главным

Но как сказали выше рекомендуется проработать постановку задачи.
...
Рейтинг: 0 / 0
22.03.2017, 10:41
    #39424619
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Хранить ID главного номера в карточке у персоны.
Думал. не факт что ID будет не от чужого номера
...
Рейтинг: 0 / 0
22.03.2017, 10:42
    #39424622
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Mr.Fontaine,

Нет не может
...
Рейтинг: 0 / 0
22.03.2017, 10:43
    #39424623
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Serguei,

1 не хотелось бы из-за контроля
2 нужно контролировать что ID не от чужого номера
...
Рейтинг: 0 / 0
22.03.2017, 10:46
    #39424625
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
softwarerbrick17На сколько оправдана схема с промежуточной таблицей
Если ограничиться только такой постановкой задачи, то промежуточная таблица лишняя - достаточно ссылки у персоны на главный номер. Но если речь идёт о серьёзной задаче, а не о курсовой, то постановку стоит прорабатывать куда глубже. Просто для примера, у человека может быть личный мобильный (сохраняется, когда он переходит на ту же работу в другого контрагента), может быть служебный мобильный (отвязывается и остаётся в старой конторе), а может быть рабочий стационарный (стоит в отделе и к нему привязано ещё пять человек).

Ссылку на персону нужно контролировать в том моменте, что она может быть от чужого номера.
Телефон привязан только к одному человеку
...
Рейтинг: 0 / 0
22.03.2017, 11:04
    #39424645
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17Хранить ID главного номера в карточке у персоны.
Думал. не факт что ID будет не от чужого номера
Я в таких случаях строю суперключ и ссылаюсь по суперключу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE persons
(
person_id NUMERIC PRIMARY KEY,
phone_id_main NUMERIC
);

CREATE TABLE phones
(
phone_id NUMERIC PRIMARY KEY,
person_id_owner NUMERIC REFERENCES persons( person_id ),
constraint phone_super_key UNIQUE( phone_id, person_id_owner )
);

ALTER TABLE persons
ADD FOREING KEY ( phone_id_main, person_id )
  REFERENCES phones ( phone_id, person_id_owner );
...
Рейтинг: 0 / 0
22.03.2017, 11:05
    #39424648
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick172 нужно контролировать что ID не от чужого номераЧто мешает ? Лень ? :)
...
Рейтинг: 0 / 0
22.03.2017, 12:56
    #39424767
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick171 не хотелось бы из-за контроля
2 нужно контролировать что ID не от чужого номера

а вы думаете вам предложат магический способ, что "оно" само все будет проверять? )
что та, что другая проверка простая- не вижу проблем. Нужно только исходить из потребностей
...
Рейтинг: 0 / 0
22.03.2017, 13:11
    #39424795
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17Ссылку на персону нужно контролировать в том моменте, что она может быть от чужого номера.
С этим отлично справится внешний ключ, если включить в него person_id.
...
Рейтинг: 0 / 0
22.03.2017, 13:28
    #39424811
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Sergueibrick171 не хотелось бы из-за контроля
2 нужно контролировать что ID не от чужого номера

а вы думаете вам предложат магический способ, что "оно" само все будет проверять? )
что та, что другая проверка простая- не вижу проблем. Нужно только исходить из потребностей

Неа.
Я думаю или делать так как я сделал. - тогда сама бд ограничениями целостности это контролирует.
И сильно ли это страшно
Или проверять.
Проблемка в том, что проверки нужны в каждой отдельной процедурке и дальше их можно тупо пропустить и вставить что-нибудь не целостное.
А так база сама бьёт по рукам.
...
Рейтинг: 0 / 0
22.03.2017, 13:29
    #39424813
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
LSVbrick172 нужно контролировать что ID не от чужого номераЧто мешает ? Лень ? :)
Проблемка в том, что проверки нужны в каждой отдельной процедурке и дальше их можно тупо пропустить и вставить что-нибудь не целостное.
А так база сама бьёт по рукам.
...
Рейтинг: 0 / 0
22.03.2017, 13:32
    #39424818
brick17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Владимир П.brick17Хранить ID главного номера в карточке у персоны.
Думал. не факт что ID будет не от чужого номера
Я в таких случаях строю суперключ и ссылаюсь по суперключу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE persons
(
person_id NUMERIC PRIMARY KEY,
phone_id_main NUMERIC
);

CREATE TABLE phones
(
phone_id NUMERIC PRIMARY KEY,
person_id_owner NUMERIC REFERENCES persons( person_id ),
constraint phone_super_key UNIQUE( phone_id, person_id_owner )
);

ALTER TABLE persons
ADD FOREING KEY ( phone_id_main, person_id )
  REFERENCES phones ( phone_id, person_id_owner );



Как уже говорил, можно упустить phone_id_main принадлежит к группе номеров именно этой записи persons. => нужно не забыть проконтролтировать в каждой процедуре.
...
Рейтинг: 0 / 0
22.03.2017, 14:52
    #39424911
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17LSVпропущено...
Что мешает ? Лень ? :)
Проблемка в том, что проверки нужны в каждой отдельной процедурке и дальше их можно тупо пропустить и вставить что-нибудь не целостное.
А так база сама бьёт по рукам.ЯННП... :)

зы: Иногда полезно отключить проверку и залить нецелостное.
...
Рейтинг: 0 / 0
22.03.2017, 15:12
    #39424947
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
brick17,

Если вы уже на двух понятиях Клиент-Телефон наставили себе кучу граблей (Заведите у Клиента три поля для телефона и не парьтесь), то что же будет дальше...
:)
...
Рейтинг: 0 / 0
22.03.2017, 15:40
    #39424989
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
vmagЗаведите у Клиента три поля для телефона и не парьтесь

Просто интересно: почему только 3, а не 5 и не 8?
...
Рейтинг: 0 / 0
22.03.2017, 16:25
    #39425046
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
Serguei,

640Кб хватит всем.
...
Рейтинг: 0 / 0
22.03.2017, 17:13
    #39425106
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение одной главной сущности среди многих
SergueiПросто интересно: почему только 3, а не 5 и не 8?

карманов не хватит...
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Выделение одной главной сущности среди многих / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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