За последние 24 часа нас посетили 43825 программистов и 1814 роботов. Сейчас ищет 891 программист ...

Вопрос про первичные ключи

Тема в разделе "MySQL", создана пользователем RazerVG, 25 окт 2014.

  1. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    У нас имеются две сущности у каждой есть первичный ключ. Ме соединяем их идентифицирующей связью один ко многим. Получается в одной из сущностей будет составной первичный ключ состоящий из своего собственного и внешнего. Так вот вопрос если к этой таблицы присоединяем еще одну и опять по идентифицирующей связи один ко многим. То в третей таблицы первичный ключ будет состоять из трех? Или из двух? Просто MySQL Workbeanch делает 3. Может можно один удалить или он обязателен? Я оставляю всегда два - это ошибка?

    Добавлено спустя 20 минут:
    к примеру есть сущность "клиенты" вторая "заказы" третья "товары в заказе". Связи расставлены везде идентифицирующие. Клиенты ( один ко многим ) Заказы. Заказы ( один ко многим ) Товары в заказе. Первичные ключи сущностей без связей ( id клиента, id заказка ,id товар в заказе). Получаеться судя по MySQL Workbeanch мне нужно делать. Первичные ключи Клиенты ( id клиента ) Заказы ( id заказа, id клиента ) Товары в заказе ( id товар в заказе id заказа, id клиента ) Просто я не понимаю зачем хранить id клиента в первичном ключе последней сущности. Если я ее могу запросом выбрать. А что если еще дальше будут связи там все в первичных ключах будет?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    с чего ты это взял?
    либо ты не понимаешь что такое первичный ключ, либо шайтан-машина что-то делает неправильно. кто у вас главный? )))

    "Товары в заказе", насколько я понимаю, это реализация связи многие-ко-многим. тот случай когда реально необходим составной ключ (id_order, id_product). а id_client в этом ключе лишний!
    то есть отдельно эту избыточность можно оставить для удобства каких-то выборок. но он не должен быть частью первичного или уникального ключа!
     
  3. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, это в зависимости от того, как организовано хранение товаров. Если у каждого товара есть уникальный ID (в системе Magento его называют SKU), т.е. у двух одинаковых пылесосов разные SKU - то можно обойтись связью "один ко многим" (один заказ ко многим товарам). И там в каждой таблице хватит одного поля на ключ (id клиента в клиентах, id заказа в заказах, SKU в товарах).