[sql] несколько вопросов по реализации БД

Discussion in 'PHP' started by Neoveneficus, 20 Mar 2009.

  1. Neoveneficus

    Neoveneficus Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    126
    Reputations:
    23
    Вопрос 1
    Есть таблица "ЗАКАЗЫ", есть в ней поле, в котором должны храниться id вероятных исполнителей. Их много и они уникальны.

    Как организовать хранение так, чтобы можно было легко проверить, есть ли данный id исполнителя в текущей записи?

    Вопрос 2
    Есть таблица "ИСПОЛНИТЕЛИ", в ней есть поле "дисциплины". Один "исполнитель" может иметь несколько дисциплин. В поле "дисциплины" будут храниться несколько уникальных id дисциплин из таблицы "ДИСЦИПЛИНЫ".

    Как организовать хранение, чтобы было легко делать выборку из таблицы "ИСПОЛНИТЕЛИ" по одному значению id дисциплины.
     
    #1 Neoveneficus, 20 Mar 2009
    Last edited: 20 Mar 2009
    1 person likes this.
  2. Rebz

    Rebz Banned

    Joined:
    8 Nov 2004
    Messages:
    4,052
    Likes Received:
    1,534
    Reputations:
    1,128
    хм.. попробуй на листочке нарисовать эти таблицы с атрибутами (полями).
    Проставь связь между таблиц (1:1, 1:N, N:M).
    Там где N:M (многие ко многим) - можно создать доп.табличку для слияния 2-х таблиц.
    Почитай про нормальные формы БД
    http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%91%D0%94

    PS лучше самому догадаться, чтобы понять суть, чем другие подскажут ;)

    PPS http://www.sql-ex.ru - хороший сайт с упражнениями по sql (требуется регистрация)
     
    #2 Rebz, 20 Mar 2009
    Last edited: 20 Mar 2009
    4 people like this.
  3. Neoveneficus

    Neoveneficus Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    126
    Reputations:
    23
    Так, я, видимо, неправильно выразился. Мне нужно придумать структуру БД на MySQL. Я просто не знаю, как такие вещи реализуются. Я могу написать по-кустарному, но хочется воспользоваться средствами самой БД, а не php. Уверен, такие средства есть.
     
  4. Neoveneficus

    Neoveneficus Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    126
    Reputations:
    23
    так, тема актуальна
    кто знает, как хранить в одной ячейке массив значений, чтобы легко работать было с ним:
    выбирать значения и редактировать средствами самого sql?
     
  5. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Таблица "заказы"
    PHP:
    CREATE TABLE `orders` (
    `
    dev_idINT NOT NULL ,
    UNIQUE (
    `
    dev_id
    )
    ENGINE InnoDB
    Проверка будет осуществлятся:
    PHP:
    SELECT dev_id
    FROM orders
    WHERE 
       dev_id
    ='1'
    LIMIT 1
    -------------------------------------------

    Таблица "исполнители"
    PHP:
    CREATE TABLE `devs` (
    `
    idINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `
    nameVARCHAR30 NOT NULL ,
    `
    jobsVARCHAR700 NOT NULL 
    ENGINE InnoDB
    Записи для теста:
    PHP:
    INSERT INTO `devs` (
    `
    id` ,
    `
    name` ,
    `
    jobs
    )
    VALUES (
    NULL 'Chaak''<jobs><job id=''1'' /><job id=''2'' /></jobs>'
    );

    INSERT INTO `devs` (
    `
    id` ,
    `
    name` ,
    `
    jobs
    )
    VALUES (
    NULL 'Neoveneficus''<jobs><job id=''1'' /><job id=''3'' /></jobs>'
    );
    Вот так оно выглядит:
    PHP:
    id     name     jobs 
       1    Chaak    
    <jobs><job id='1' /><job id='2' /></jobs>
       
    2    Neoveneficus    <jobs><job id='1' /><job id='3' /></jobs>

    Запрос выборки имени по id занятий:
    PHP:
    SELECT name
    FROM devs
    WHERE jobs LIKE 
    '%<job id=\'1\' />%'
    LIMIT 0 30
    <job id=\'1\' /> - еденичка это id занятий исполнителя :)
     
    #5 Chaak, 20 Mar 2009
    Last edited: 20 Mar 2009
    4 people like this.
  6. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Chaak омфк))))
    Neoveneficus предлагаю след. структуру.
    Рассмотрим на примере заказов и вероятных исполнителей.
    Будет 3 таблицы:

    1) Заказы
    2) Исполнители
    3) Назовем ее к примеру Заказы_Исполнители (хотя название нормальное стоило бпридумать)


    У заказов и исполнителей есть id-шники и еще какая то инфа.
    А у таблицы Заказы_Исполнители будет след. структура:

    id_заказа
    id_исполнителя
    ... (здесь можно вставить еще какую-либо вспомогательную инфу, если она необходима).


    Первичный ключ в данной таблице будет составной, а именно
    id_заказа + id_исполнителя
    В свою очередь эти пля ссылаются на те таблички (заказы и исполнители... для поддержания целостности БД).

    И вот через эту табличку легко реализуется целостность и нормальная работа.
    Допустим надо тебе получить всех птенциальных исполнителей - сджойнил таблички (ну либо просо выборку сварганил на основе коррелирующего пдзапроса) - и ходиш улыбаешся :)
     
    2 people like this.
  7. Neoveneficus

    Neoveneficus Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    126
    Reputations:
    23
    VDShark, кул, но:
    Как сделать составной первичный ключ?
    Как сделать ссылки на другие таблицы?
    Как джойнить таблички? Что это значит?
    Что такое коррелирующий подзапрос?

    =) буду очень благодарен, если разжуешь =)
     
  8. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Всюинфу можно легко найти :) Но распишу

    1) Составной первичный ключ
    Code:
    PRIMARY KEY (поле1, поле2)

    2) FOREIGN KEY ... REFERENCES
    Подробнее http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

    3) Джойнить от слова JOIN - соединение... Подробнее про это ты можешь почитать в моей статье
    sql. Явные операции соединения. Как готовить и с чем есть.

    4) Что такое коррелирующий подзапрос тоже не буду расписывать... Это достаточно хорошо расписано в дружественном для sql-ex проекте sqlbooks :)
    Коррелирующие подзапросы
     
    1 person likes this.
Loading...
Similar Threads - несколько вопросов реализации
  1. GAiN
    Replies:
    3
    Views:
    7,433