Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильный дроп таблицы [D7, MSSQL]


Страницы:   1 2 3

Незнакомец ©   (2006-01-25 08:59:00) 

Доброго времени суток!
Проблема : таблицы удаляются через раз, по непонматно причине...

Я вот думаю, мож ли явится причиной то, что например, один пользователь добаляет в таблицу, а другой пытается ее удалить?

Если так надо как-то определить что с таблицей никто не работает, а если и работает, то заблокировать таблицу и удалить ее...

Правильно ли я рассуждаю и как это сделать? :)


Sergey13   (2006-01-25 10:29:00) [21]

2[21] Незнакомец   (25.01.06 10:17)
> А что скажите по предложенным мной структурам БД?
Это которые в [12]? Это похоже вроде на "мой" вариант, только денормализовано (про нормализацию читать в книгах).


Незнакомец   (2006-01-25 10:24:00) [22]

Думаю коментарии лишними не будут :)


Ega23   (2006-01-25 10:19:00) [23]

Приблизительно так. Это без дерева.
Расшифровывать надо? Или сам разберёшься?


Ega23   (2006-01-25 10:18:00) [24]

/*==============================================================*/
/* Database name:  PhysicalDataModel_1                          */
/* DBMS name:      Microsoft SQL Server 2000                    */
/* Created on:     25.01.2006 10:22:40                          */
/*==============================================================*/

alter table Messages
  drop constraint FK_MESSAGES_REFERENCE_TOPICS
go

alter table Messages
  drop constraint FK_MESSAGES_REFERENCE_PERSONS
go

alter table Topics
  drop constraint FK_TOPICS_REFERENCE_TOPICTYP
go

alter table Topics
  drop constraint FK_TOPICS_REFERENCE_PERSONS
go

if exists (select 1
           from  sysobjects
          where  id = object_id('Messages')
           and   type = 'U')
  drop table Messages
go

if exists (select 1
           from  sysobjects
          where  id = object_id('Persons')
           and   type = 'U')
  drop table Persons
go

if exists (select 1
           from  sysobjects
          where  id = object_id('TopicTypes')
           and   type = 'U')
  drop table TopicTypes
go

if exists (select 1
           from  sysobjects
          where  id = object_id('Topics')
           and   type = 'U')
  drop table Topics
go

/*==============================================================*/
/* Table: Messages                                              */
/*==============================================================*/
create table Messages (
  MessID               int Identity(0,1)    not null,
  TopID                int Identity(0,1)    null,
  PersID               int Identity(0,1)    null,
  MessText             varchar(2000)        not null,
  constraint PK_MESSAGES primary key  (MessID)
)
go

/*==============================================================*/
/* Table: Persons                                               */
/*==============================================================*/
create table Persons (
  PersID               int Identity(0,1)    not null,
  PersNam1             varchar(32)          not null,
  PersNam2             varchar(32)          not null,
  PersNam3             varchar(32)          not null,
  PersImg              image                null,
  constraint PK_PERSONS primary key  (PersID)
)
go

/*==============================================================*/
/* Table: TopicTypes                                            */
/*==============================================================*/
create table TopicTypes (
  TopTypCod            int                  not null,
  TopTypNam            varchar(64)          not null,
  TopTypLab            varchar(32)          not null,
  TopTypImg            image                null,
  constraint PK_TOPICTYPES primary key  (TopTypCod)
)
go

/*==============================================================*/
/* Table: Topics                                                */
/*==============================================================*/
create table Topics (
  TopID                int Identity(0,1)    not null,
  TopTypCod            int                  null,
  PersID               int Identity(0,1)    null,
  TopNam               varchar(64)          not null,
  TopDate              datetime             not null,
  constraint PK_TOPICS primary key  (TopID)
)
go

alter table Messages
  add constraint FK_MESSAGES_REFERENCE_TOPICS foreign key (TopID)
     references Topics (TopID)
go

alter table Messages
  add constraint FK_MESSAGES_REFERENCE_PERSONS foreign key (PersID)
     references Persons (PersID)
go

alter table Topics
  add constraint FK_TOPICS_REFERENCE_TOPICTYP foreign key (TopTypCod)
     references TopicTypes (TopTypCod)
go

alter table Topics
  add constraint FK_TOPICS_REFERENCE_PERSONS foreign key (PersID)
     references Persons (PersID)
go


Незнакомец   (2006-01-25 10:17:00) [25]


> Sergey13 ©  

С MSSQL хочу :)
А что скажите по предложенным мной структурам БД?


Sergey13   (2006-01-25 10:14:00) [26]

2[19] Незнакомец   (25.01.06 10:10)
>  только на поисковики не пинайте :)
Лучше я тебя "пну" в книжный магазин. Любая книжка, где в названии присутствует "Базы Данных" - то что тебе надо. Это во всех отражено. Лучше конечно, если упор и примеры будут по той БД, с которой работать хочешь.


Незнакомец   (2006-01-25 10:10:00) [27]


> Учись. Никто не умел в начале. Связи (реляции) - основа
> реляционных БД.

Не подкинете информации по данному вопросу? только на поисковики не пинайте :)


Sergey13   (2006-01-25 10:08:00) [28]

2[14] Незнакомец   (25.01.06 10:05)
> Я не умею работать со связанными таблицами :(
Учись. Никто не умел в начале. Связи (реляции) - основа реляционных БД.


Незнакомец   (2006-01-25 10:07:00) [29]


> Потерпи минут 20, я сейча чуток занят, попозже накидаю тебе
> структуру.

Ждус :)


Незнакомец   (2006-01-25 10:07:00) [30]

Интересная, а какая структура БД у данного форума? :)


Ega23   (2006-01-25 10:06:00) [31]


> Я не умею работать со связанными таблицами :(


Потерпи минут 20, я сейча чуток занят, попозже накидаю тебе структуру.


Незнакомец   (2006-01-25 10:05:00) [32]


> Угу. Неправильно. Если простенько, то можно и без "дерева"
> обойтись. Надо 4 таблицы - "Темы", "Топики", "Содержание
> топиков" и  "Авторы". Связать их правильно как 1:много внешними
> ключами.

Я не умею работать со связанными таблицами :(


Ega23   (2006-01-25 10:04:00) [33]


> Если простенько, то можно и без "дерева" обойтись. Надо
> 4 таблицы - "Темы", "Топики", "Содержание топиков" и  "Авторы".
>  Связать их правильно как 1:много внешними ключами.
>


Кстати да. Так проще будет. С деревом намучаешься, если начинающий. Всякие рекурсивные обходы и т.п.
Наверное, Сергей прав. Начни с такой структуры.


Незнакомец   (2006-01-25 10:03:00) [34]

Еще вопросик:

Вообщем, у меня такая структура БД:
1) есть главная таблица из 2 колонок в которой хранятся имена всех форумов и имя самой таблицы форума, например,

| Форум | Имя таблицы|
| Обсуждение погоды | thread1 |
| Машины | thread2 |

2) Далее в каждой теме(thread1, thread2 и т.д.) имеется ряд колонок

| Тема | От кого | Имя таблицы |
| сегодня холодно | Вася | df4hkjsdjfkhjk34 |
| Жара | Сюзька | fkjgdfjg4jtwl90sf |

То есть каждая ветка форума это отдельная таблица...

3) Ну и в каждой конкретной таблице отдельной ветки форума храняться сообщения...

Вопрос: правильная ли является данная структура, если не то, что исправить? и вообще как надо правильно? :)

Я еще думал о другой структуре БД:
1) Создать таблицы всех постов, допустим со след столбцами:
| Тема | От кого | IDForumaPosts |

2) И создать таблицу форумов:
| Тема | От кого | IDForuma |

Принцып работы следующий, выводим на экран содержимое таблицы форумов, то есть по сути названия форумов. Далее делаем селективный SQL-запрос из таблицы постов WHERE (IDForumsPosts = IDForuma) тем самым отбирая собщения по конкретному форуму...

Какая структура правельнее или может они обе бредовые?


Sergey13   (2006-01-25 10:01:00) [35]

2[5] Незнакомец   (25.01.06 09:32)
>  На сколько я понял я даже не правильно БД спроецировал? или что?
Угу. Неправильно. Если простенько, то можно и без "дерева" обойтись. Надо 4 таблицы - "Темы", "Топики", "Содержание топиков" и  "Авторы". Связать их правильно как 1:много внешними ключами.


Ega23   (2006-01-25 09:59:00) [36]


> Удаляется кючевое поле, потом что-то проверяется и удаляется
> таблица? :)


Ну, это аккуратное удаление таблицы.
Сначала удаляется constraint (не ключевое поле, а именно связь между ParTopID и TopID). Потом проверяется наличие таблицы Topics в БД, и если таковая имеется, то она удаляетя.


Незнакомец   (2006-01-25 09:56:00) [37]


> Ega23 ©  

Хе... да я понял структуру таблицы :) я немного не понял вот:


alter table Topics
 drop constraint FK_TOPICS_REFERENCE_TOPICS
go

if exists (select 1
          from  sysobjects
         where  id = object_id('Topics')
          and   type = 'U')
 drop table Topics
go


Именно этот момент я не пойму, я работал с элементарными конструкциями SELECT FROM... INSER... DELERE... UPDATE, поэтом немного не понятно :)

Удаляется кючевое поле, потом что-то проверяется и удаляется таблица? :)


Ega23   (2006-01-25 09:53:00) [38]


> Не будете ли вы так любезны и объясните что это, я же говорил
> что я только начал изучать данную тему?


Обьясняю. Что такое "дерево" знаешь? Это подвид графа, где каждый элемент ссылается на своего родителя. У первого элемента "родителя" нет, он считается корнем.
Вот данная таблица и есть представление этого дерева.
TopID - уникальный идентификатор топика
ParTopID - ссылка на родительский топик
TopName - название топика
TopURL - адрес топика
TopType - тип топика (вторичный ключ на таблицу TopicTypes)
TopMsg - собственно сам текст сообщения.

Естественно, это навскидку. Как я сам бы такую вещь делал.


Незнакомец   (2006-01-25 09:47:00) [39]


> Ega23 ©

Не будете ли вы так любезны и объясните что это, я же говорил что я только начал изучать данную тему?


Ega23   (2006-01-25 09:39:00) [40]


> На сколько я понял я даже не правильно БД спроецировал?
> или что?
>


Êîíå÷íî. Óäàëåíèå òàáëèöû - æåñòîêàÿ îïåðàöèÿ.
Ñäåëàé что-то типа



alter table Topics
  drop constraint FK_TOPICS_REFERENCE_TOPICS
go

if exists (select 1
           from  sysobjects
          where  id = object_id('Topics')
           and   type = 'U')
  drop table Topics
go

/*==============================================================*/
/* Table: Topics                                                */
/*==============================================================*/
create table Topics (
  TopID                Int Identity(0,1)    not null,
  ParTopID             int                  null,
  TopName              varchar(64)          not null,
  TopURL               varchar(255)         not null,
  TopType              int                  not null,
  TopMsg               varchar(2000)        not null,
  constraint PK_TOPICS primary key  (TopID)
)
go

alter table Topics
  add constraint FK_TOPICS_REFERENCE_TOPICS foreign key (ParTopID)
     references Topics (TopID)
go


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо