Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
Незнакомец   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.013 c
2-1141447935
Trych
2006-03-04 07:52
2006.03.19
Не создает поток


3-1138282885
Stanislav
2006-01-26 16:41
2006.03.19
Передать серверу Application Name


6-1133858903
Alexandr
2005-12-06 11:48
2006.03.19
выбор технологии для обмена данными


1-1140099900
NBSD
2006-02-16 17:25
2006.03.19
Поиск символа... вроде бы :)


3-1138550324
wizzz
2006-01-29 18:58
2006.03.19
Как отловить событие "выбор значения из PickList"?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский