За последние 24 часа нас посетили 17829 программистов и 1646 роботов. Сейчас ищут 854 программиста ...

Целостность базы в рамках одной таблицы

Тема в разделе "MySQL", создана пользователем Physicist, 24 апр 2013.

  1. Physicist

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

    С нами с:
    31 июл 2012
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте.
    Стоит такая задача.
    Допустим, есть таблица со столбцами id, sid, title
    sid - может принимать значения id, например, выражая тем самым привязанность (вложенность) по данному id. Например какой-либо список, возмём список географического местарасположения. Страны имеют sid=0, то есть не являются подкатегорией чего-либо, от них мы и отталкиваемся. Далее, пойдут регионы имеющие в качестве sid, id страны, потом сами населённые пункты, имеющие sid'ом id региона.
    Думаю, структуру объяснил понятно.
    Вопрос такой, можно ли в рамках одной таблицы в базе зафиксировать некую "ссылочную целостность" по строкам таблицы? Например удалив какой-либо регион, сразу удаляться и все записи насселенных пункты в нём? Или удалив страну - удаляться и регионы и населённые пункты этой страны?

    PS: прошу, не предлагать использовать несколько таблиц, отдельных для стран, регионов и т.п., задачу (если это вообще возможно) надо решить в рамках вышеприведённых условий. География лишь пример, а хочется решить это задачу наиболее абстрактно общим образом, когда даже при разработке проекта неизвестно сколько подкатегорий будет, может даже вообще это будет динамическое создания каких-либо категорий и подкатегорий (каталоги, интернет-магазины, рубрики в блогах, древовидное меню и т.д.)
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    транзакции есть.
    открыл транзакцию и ковыряешь бд. потом либо сохраняешь изменения, либо откатываешь. только надо выборки лочить в тех случаях, когда другие не должны изменить данные пока ты не сохранился.
     
  3. Physicist

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

    С нами с:
    31 июл 2012
    Сообщения:
    13
    Симпатии:
    0
    Конечно не то, чего хотелось бы. Транзакции, как я понимаю, придётся встраивать в сам код, а тут хотелось бы решить задачу на самом этапе проектирования базы, как это делается в случае двух таблиц при помощи FOREIGN KEY.