URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3639
[ Назад ]

Исходное сообщение
"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 , 25-Ноя-04 04:50 
>Здравствуйте. Чтот я до сих пор не могу понять одну важную вещь
>в реляционых моделях БД. Допустим есть две таблицы:
>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 , 25-Ноя-04 11:25 
>тебе необходимо понимание  - что такое блокировка на чтение и на
>запись,
>и, главное, о проектировании БД (достаточно чего-то вводного)
>почитай книжки - кратко ответить нельзя на твой вопрос

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


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

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


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