Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Правильный дроп таблицы   Найти похожие ветки 

 
Незнакомец   (2006-01-25 08:59) [0]

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

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

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

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


 
ANB ©   (2006-01-25 09:16) [1]

Неправильно активно дропать на ходу таблицы. Если они тебе потом не нужны - так создавай временные.


 
Незнакомец   (2006-01-25 09:23) [2]

Почему? дело в том что одна таблица это одна ветка форума, и соответственно чтобы удалить ветку форума мне надо и таблицу дропнуть...


 
Ega23 ©   (2006-01-25 09:28) [3]


> Почему? дело в том что одна таблица это одна ветка форума,
>  и соответственно чтобы удалить ветку форума мне надо и
> таблицу дропнуть...
>


Ужос. Почему не "деревянная" таблица?


 
Незнакомец   (2006-01-25 09:32) [4]


> Ужос. Почему не "деревянная" таблица?

Я в этом не силен, будьте добры объяснить в чем моя ошибка? Я только начал работать с БД и решил учится на создании простенького форума, резные темы простое добавление сообщений и все. На сколько я понял я даже не правильно БД спроецировал? или что?


 
Незнакомец   (2006-01-25 09:32) [5]


> Ужос. Почему не "деревянная" таблица?

Я в этом не силен, будьте добры объяснить в чем моя ошибка? Я только начал работать с БД и решил учится на создании простенького форума, резные темы простое добавление сообщений и все. На сколько я понял я даже не правильно БД спроецировал? или что?


 
Ega23 ©   (2006-01-25 09:39) [6]


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


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



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



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


> Ega23 ©

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


 
Ega23 ©   (2006-01-25 09:53) [8]


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


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

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


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


> 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:59) [10]


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


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


 
Sergey13 ©   (2006-01-25 10:01) [11]

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


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

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

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

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

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

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

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

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

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

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

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

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

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


 
Ega23 ©   (2006-01-25 10:04) [13]


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


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


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


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

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


 
Ega23 ©   (2006-01-25 10:06) [15]


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


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


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

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


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


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

Ждус :)


 
Sergey13 ©   (2006-01-25 10:08) [18]

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


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


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

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


 
Sergey13 ©   (2006-01-25 10:14) [20]

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


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


> Sergey13 ©  

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


 
Ega23 ©   (2006-01-25 10:18) [22]

/*==============================================================*/
/* 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



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

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


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

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


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

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


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


> только денормализовано

В общих чертах что это значит?


 
Ega23 ©   (2006-01-25 10:41) [27]

Загони мой скрипт на базу, посмотри визуально, что получится.
Многое понятно станет.


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

Server: Msg 4902, Level 16, State 1, Line 7
Cannot alter table "Messages" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Messages" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Topics" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Topics" because this table does not exist in database "master".
Server: Msg 8147, Level 16, State 1, Line 5
Could not create IDENTITY attribute on nullable column "TopID", table "Messages".
Server: Msg 8147, Level 16, State 1, Line 5
Could not create IDENTITY attribute on nullable column "PersID", table "Messages".
Server: Msg 2744, Level 16, State 1, Line 5
Multiple identity columns specified for table "Messages". Only one identity column per table is allowed.
Server: Msg 8147, Level 16, State 1, Line 5
Could not create IDENTITY attribute on nullable column "PersID", table "Topics".
Server: Msg 2744, Level 16, State 1, Line 5
Multiple identity columns specified for table "Topics". Only one identity column per table is allowed.
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Messages" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Messages" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Topics" because this table does not exist in database "master".
Server: Msg 4902, Level 16, State 1, Line 2
Cannot alter table "Topics" because this table does not exist in database "master".


 
Sergey13 ©   (2006-01-25 10:53) [29]

2 [26] Незнакомец   (25.01.06 10:33)
> В общих чертах что это значит?
Это значит, что вместо
| Тема | От кого | IDForumaPosts |
должно быть
| ИД_Темы | ИД_От кого | IDForumaPosts |


 
Ega23 ©   (2006-01-25 10:55) [30]


> Незнакомец   (25.01.06 10:49) [28]


Ты чё, обалдел???? Нафига на master-то накатил????
Хочешь сервер порушить?


 
Ega23 ©   (2006-01-25 10:59) [31]

Messages - во вторичных ключах (PersID и TopID) Identity убери.
Это у меня PowerDesigner глюкнул, а я внимания не обратил.
В Topics на PersID - тоже.


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

Хрен редьки не слаще, пробовал в отдельной мною созданной БД, тоже самое...


 
Незнакомец   (2006-01-25 11:09) [33]

Все... понял что ты имел ввиду :) забавно...


 
Ega23 ©   (2006-01-25 11:09) [34]


> Все... понял что ты имел ввиду :) забавно...


Разобрался?


 
Незнакомец   (2006-01-25 11:11) [35]

Только не пойму зачем TopicTypes ? и какие поля за что отвечают?


 
Ega23 ©   (2006-01-25 11:19) [36]


> Только не пойму зачем TopicTypes ? и какие поля за что отвечают?


Если аналогию с данным форумом профодить, то
TopicTypes - аналог конференций (Основная, Базы, и т.п.)
Topics - ветки сообщения
Messages - собственно сами сообщения.
Persons - посетители сайта.
Ссылка на Persons из Topics - определяет человека, создавшего ветку.
Ссылка на Persons из Messages - определяет человека, ответившего.

Всё просто.


 
Sergey13 ©   (2006-01-25 11:22) [37]

2Ega23 ©
ИМХО, зря ты ему скрипт дал. Мне не жалко, просто мне кажется такие вещи надо учится делать самому. А подобные скрипты способствуют желанию использовать их как болванку для всего последующего.

Все сугубо ИМХО и не в качестве какого либо наезда.


 
Ega23 ©   (2006-01-25 11:26) [38]


> ИМХО, зря ты ему скрипт дал. Мне не жалко, просто мне кажется
> такие вещи надо учится делать самому.


В идеале, я бы скрин-шот из PowerDesigner дал.Но такой возможности нету.


 
Незнакомец   (2006-01-25 11:26) [39]

Понятно :)


 TopTypCod      int                  not null,
 TopTypNam     varchar(64)          not null,
 TopTypLab      varchar(32)          not null,
 TopTypImg      image                null,


Тут TopTypCod и TopTypNam это понятно ID и описание форума, а на кой TopTypLab и TopTypImg?


 
Ega23 ©   (2006-01-25 11:29) [40]

Lab - это сокращённое название. Img - картинка.
Не нужно - выкини.



Страницы: 1 2 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.045 c
1-1139914089
Азазелло
2006-02-14 13:48
2006.03.19
вопрос по TWordDocument...


15-1140903519
DillerXX
2006-02-26 00:38
2006.03.19
Посмотрите что я творил ;)


15-1141056322
rsetpro
2006-02-27 19:05
2006.03.19
Реклама в метро, наружная реклама, реклама на транспорте.


6-1133271863
WebSQLNeeder
2005-11-29 16:44
2006.03.19
Как програмно изменить размеры фрейма вна странице в TWebBrowser


15-1140628618
easy
2006-02-22 20:16
2006.03.19
Coombay Dance Band