The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Subject:Целостность данных - проектирование БД"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Subject:Целостность данных - проектирование БД"
Сообщение от Nerian emailИскать по авторуВ закладки on 25-Ноя-04, 00:09  (MSK)
Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь в реляционых моделях БД. Допустим есть две таблицы:
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;
Но вот как быть если состояние было удалено?
То тогда в нашем примере мы потеряем заказы в этом состояние.
Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не было потери данных.
И ещё вопрос: например как в форумах с регистрацией сделано что после того как пользователь удалил свой аккаунт, письма не удаляються, а остаються с его ником? вот мнеб чтот на подобии надо. Плиз всем помогите.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Subject:Целостность данных - проектирование БД"
Сообщение от gr Искать по авторуВ закладки on 25-Ноя-04, 04:50  (MSK)
>Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь
>в реляционых моделях БД. Допустим есть две таблицы:
>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;
>Но вот как быть если состояние было удалено?
>То тогда в нашем примере мы потеряем заказы в этом состояние.
>Как бы это обойти? Чтобы осталась возможность добовлять/удалять новыве состояния, и не
>было потери данных.
>И ещё вопрос: например как в форумах с регистрацией сделано что после
>того как пользователь удалил свой аккаунт, письма не удаляються, а остаються
>с его ником? вот мнеб чтот на подобии надо. Плиз всем
>помогите.


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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Subject:Целостность данных - проектирование БД"
Сообщение от Nerian emailИскать по авторуВ закладки on 25-Ноя-04, 11:25  (MSK)
>тебе необходимо понимание  - что такое блокировка на чтение и на
>запись,
>и, главное, о проектировании БД (достаточно чего-то вводного)
>почитай книжки - кратко ответить нельзя на твой вопрос

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Subject:Целостность данных - проектирование БД"
Сообщение от DiM_root emailИскать по авторуВ закладки(ok) on 25-Ноя-04, 15:04  (MSK)
>Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь
>в реляционых моделях БД. Допустим есть две таблицы:
>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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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