The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Subject:Целостность данных - проектирование БД, !*! Nerian, 25-Ноя-04, 00:09  [смотреть все]
Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь в реляционых моделях БД. Допустим есть две таблицы:
customs:
id - autoincrement int not null primary key
name - varchar(25)
state - int
states:
id - autoincrement int not null primary key
name - varchar(25)

customs - хранит название заказа, и ссылку на состояние.
Понятно чтобы получить какой заказ на каком состояние очень просто:
select customs.name as cname,states.name as sname where customs.state = states.id;
Но вот как быть если состояние было удалено?
То тогда в нашем примере мы потеряем заказы в этом состояние.
Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не было потери данных.
И ещё вопрос: например как в форумах с регистрацией сделано что после того как пользователь удалил свой аккаунт, письма не удаляються, а остаються с его ником? вот мнеб чтот на подобии надо. Плиз всем помогите.

  • Subject:Целостность данных - проектирование БД, !*! gr, 04:50 , 25-Ноя-04 (1)
    >Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь
    >в реляционых моделях БД. Допустим есть две таблицы:
    >customs:
    >id - autoincrement int not null primary key
    >name - varchar(25)
    >state - int
    >states:
    >id - autoincrement int not null primary key
    >name - varchar(25)
    >
    >customs - хранит название заказа, и ссылку на состояние.
    >Понятно чтобы получить какой заказ на каком состояние очень просто:
    >select customs.name as cname,states.name as sname where customs.state = states.id;
    >Но вот как быть если состояние было удалено?
    >То тогда в нашем примере мы потеряем заказы в этом состояние.
    >Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не
    >было потери данных.
    >И ещё вопрос: например как в форумах с регистрацией сделано что после
    >того как пользователь удалил свой аккаунт, письма не удаляються, а остаються
    >с его ником? вот мнеб чтот на подобии надо. Плиз всем
    >помогите.


    тебе необходимо понимание  - что такое блокировка на чтение и на запись,
    и, главное, о проектировании БД (достаточно чего-то вводного)
    почитай книжки - кратко ответить нельзя на твой вопрос

    • Subject:Целостность данных - проектирование БД, !*! Nerian, 11:25 , 25-Ноя-04 (2)
      >тебе необходимо понимание  - что такое блокировка на чтение и на
      >запись,
      >и, главное, о проектировании БД (достаточно чего-то вводного)
      >почитай книжки - кратко ответить нельзя на твой вопрос

      Я знаю что такое блокировка и книги читал. Вопрос при чём тут блокировка? Состояния реально могут изменять/добавляться и удаляться

  • Subject:Целостность данных - проектирование БД, !*! rnl, 11:46 , 25-Ноя-04 (3)
    >Понятно чтобы получить какой заказ на каком состояние очень просто:
    >select customs.name as cname,states.name as sname where customs.state = states.id;
    >Но вот как быть если состояние было удалено?
    >То тогда в нашем примере мы потеряем заказы в этом состояние.
    >Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не
    >было потери данных.

    если смысл в том, чтобы в результате такого запроса по-любому получить список заказов, то должен помочь select не с обычным join'ом, а с LEFT JOIN.

  • Subject:Целостность данных - проектирование БД, !*! DiM_root, 15:04 , 25-Ноя-04 (4)
    >Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь
    >в реляционых моделях БД. Допустим есть две таблицы:
    >customs:
    >id - autoincrement int not null primary key
    >name - varchar(25)
    >state - int
    >states:
    >id - autoincrement int not null primary key
    >name - varchar(25)
    >
    >customs - хранит название заказа, и ссылку на состояние.
    >Понятно чтобы получить какой заказ на каком состояние очень просто:
    >select customs.name as cname,states.name as sname where customs.state = states.id;
    >Но вот как быть если состояние было удалено?
    >То тогда в нашем примере мы потеряем заказы в этом состояние.
    >Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не
    >было потери данных.
    >И ещё вопрос: например как в форумах с регистрацией сделано что после
    >того как пользователь удалил свой аккаунт, письма не удаляються, а остаються
    >с его ником? вот мнеб чтот на подобии надо. Плиз всем
    >помогите.

    если я правильно понял вопрос, то тебе надо почитать про JOIN, LEFT JOIN, RIGHT JOIN ...
    Хорошая дока есть на сайте www.mysql.com




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру