Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Различные связи 
:(
    Опции темы
DDeath
Дата 17.8.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.7.2008

Репутация: нет
Всего: нет



Добрый день. Возник вопрос при проектировании БД на MySql.

Имею 3 таблицы 

1. Countries - | ID | Name |

2. Organizations - | ID | Name | Country | CustomCol1 | CustomCol2 | ... |

3. Companies - | ID | Name | Organization | CustomCol1 | CustomCol2 | ... |

Вопросы:

1. Организации могут быть международними и не принадлежать к какой либо стране - Правильно ли хранить связь в таблице если она может быть пустой? А если нет то как?
2. Есть еще 5 таблиц (Пример : News,  Articles, Tenders и т.п) которые могут принадлежать к одной из трёх таблиц(Countries , Organizations , Companies)  - Как правильно хранить такие связи?

Спасибо.
PM MAIL   Вверх
Fortop
Дата 17.8.2013, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Цитата(DDeath @  17.8.2013,  15:39 Найти цитируемый пост)
Организации могут быть международними и не принадлежать к какой либо стране

Создай страну "международная"


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Fortop
Дата 17.8.2013, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Цитата(DDeath @  17.8.2013,  15:39 Найти цитируемый пост)
2. Есть еще 5 таблиц (Пример : News,  Articles, Tenders и т.п) которые могут принадлежать к одной из трёх таблиц(Countries , Organizations , Companies)  - Как правильно хранить такие связи?

В зависимости от требований.


  • Если news,articles и т.д. для каждого типа это самостоятельные выборки, то можно их хранить в отдельных таблицах news_country, news_organizations и т.д.
    Но это не всегда удобно.
  • Если нужно делать общую выборку по новостям, то есть два варианта
    1.  в поле новостей указывать тип (фактически к чему относится данная новость).
    2.  Создать некий объект "виртуальное лицо" в который будут входить все объекты из (Countries , Organizations , Companies)  и связывать New уже с этим объектом.
  •  Пересмотреть вопрос связи например News с остальными вещами. Ведь наверняка новость может принадлежать и стране и организации и компании одновременно.
    В таком случае можно ввести еще и фиктивные Организацию и Компанию.
    А связи хранить как многие ко многим.

    Итого получается такая иерархия

    Страна -> Организация -> Компания

    При этом у нас есть страна "Весь мир" которой могут принадлежать Организации.
    И есть "Фиктивная организация" которой могут принадлежать компании.

    Таким образом ты выстроишь полную цепочку связей.



  • --------------------
    Мир это Я.
    Живее всех живых.
    PM MAIL   Вверх
    DDeath
    Дата 18.8.2013, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


    Новичок



    Профиль
    Группа: Участник
    Сообщений: 22
    Регистрация: 11.7.2008

    Репутация: нет
    Всего: нет



    1. Спасибо!

    2. Не совсем вас понял. 

    Цитата

    Пересмотреть вопрос связи например News с остальными вещами. Ведь наверняка новость может принадлежать и стране и организации и компании одновременно.
    В таком случае можно ввести еще и фиктивные Организацию и Компанию.
    А связи хранить как многие ко многим.


    Не выйдет , если с новостями это может получится то с остальными элементами не выйдет.


    Цитата

     Создать некий объект "виртуальное лицо" в который будут входить все объекты из (Countries , Organizations , Companies)  и связывать New уже с этим объектом.


    Можно пример ? 
    PM MAIL   Вверх
    Fortop
    Дата 20.8.2013, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


    Эксперт
    ****


    Профиль
    Группа: Завсегдатай
    Сообщений: 2200
    Регистрация: 13.11.2007
    Где: Донецк

    Репутация: 4
    Всего: 42



    Цитата(DDeath @  18.8.2013,  15:17 Найти цитируемый пост)
    Не выйдет , если с новостями это может получится то с остальными элементами не выйдет.

    Почему?
    Чем они от новостей отличаются-то?

    Цитата(DDeath @  18.8.2013,  15:17 Найти цитируемый пост)
    Можно пример ?  


    Таблица GlobalUniqueId
    id uniq PK
    typeof enum(Countries , Organizations , Companies)

    Теперь в каждую из 3х таблиц добавляется поле guid (т.е. каждая запись имеет глобальный уникальный идентификатор для всех 3х таблиц)

    Далее ты свои новости, тендеры и прочее связываешь по этому guid
    Если отношения многие к одному, то пойдет и так, достаточно добавить в таблицы новостей/тендеров/артиклей поле владельца (guid)
    Если многие ко многим, то нужны промежуточные таблицы (1,2,3...9 в зависимости от...) для связей.

    Более точно не распишу, поскольку зависит от условий (может ли новость/тендер/артикль принадлежать одновременно нескольким объектам, из одной или из разных таблиц и т.д.)




    --------------------
    Мир это Я.
    Живее всех живых.
    PM MAIL   Вверх
      
    Ответ в темуСоздание новой темы Создание опроса
    0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | MySQL | Следующая тема »


     




    [ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.