Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Комментарии / 24 сообщений из 24, страница 1 из 1
15.08.2008, 14:09:52
    #35489799
griZZZly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Допустим, есть две таблицы (две сущности) Table1 и Table2.
Эти сущности представлены в соответствующих разделах сайте. Хочется, чтобы пользователь мог оставлять комментарии на каждом из разделов - то есть необходимо создать таблицы Table1Comments и Table2Comments. По-моему, это не очень хорошо.
Другой вариант - обойтись без связи между таблицами, что мне тоже не очень нравится.
Может есть еще варианты, как это лучше сделать?
...
Рейтинг: 0 / 0
21.08.2008, 17:38:58
    #35500097
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Господа, есть ли профессиональные архитекторы БД?
Как поступать в таком случае? Что с производительностью?
...
Рейтинг: 0 / 0
21.08.2008, 18:26:35
    #35500239
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
[quot griZZZly]

>>> Допустим, есть две таблицы (две сущности) Table1 и Table2.

Допустим.

>>> Эти сущности представлены в соответствующих разделах сайте.

Раздел сайт к БД имеет очень отдаленное отношение.
И что такое раздел сайта? HTML-страница, директория, веб-приложение ...

>>> Хочется, чтобы пользователь мог оставлять комментарии на каждом из разделов

Допустим.

>>> то есть необходимо создать таблицы Table1Comments и Table2Comments.

Совсем не необходимо

>>> По-моему, это не очень хорошо.

А почему собственно?

>>> Другой вариант - обойтись без связи между таблицами, что мне тоже не очень нравится.

Вы не говорили что у вас Table1Comments и Table2Comments как то и с чем то связаны

>>> Может есть еще варианты, как это лучше сделать?

Выбор варианта зависит от разных превходящих.
Например Table 1 и 2 размещены на одном физическом устройстве - на разных устройствах
Комментариев будет 1:1 или много:1
Какие выборки будут задаваться по комментариям.
Да и вообще насколько критична производительность запросов к комментариям
...
Рейтинг: 0 / 0
22.08.2008, 08:40:33
    #35500753
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Если правильно понял.
Вот примерное решение для одной из таблиц с комментарием
Table1Comment:
Author_Name, Author_Origin (откуда), Author_IP (заполняетс я автоматически),
CommentDateTime (заполняетс я автоматически), Comment
То же самое для второй
Можно предложтить авторам регистрироваться на сайте - тогда автора вынесете
в отдельную таблицу
и при формировании отчетов можно будет фильтровать комментарии по автору (а
вдруг один автор оставит несколько комментариев)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 09:49:27
    #35500853
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
apapacy Например Table 1 и 2 размещены на одном физическом устройстве - на разных устройствах
ИМХО, именно этот пункт рассматривать не нужно, DBA этим занимается
Valentin Kotelnitski Вот примерное решение для одной из таблиц с комментарием..
А что если у нас N сущностей и к каждой есть комментарий. Правильно ли я понимаю, что
паттерн селектор(в общей таблице комментариев есть поля EntityTypeId,EntityId и EntityId сслылается на таблицы в зависимости от EntityTypeId) уже стал общеупотребительным в таком случае? Можно ли тогда реализовать ссылочную целосность(скажем в SQL Server 2005)?
Поделитесь своим опытом, ибо в книжках мало что написано...
...
Рейтинг: 0 / 0
22.08.2008, 11:14:44
    #35501064
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Правильно думаете насчет EntityTypeId и EntityId. Я считаю, что это
естественное решение.
Ссылочная целостность будет реализовываться (все проверки будут
производиться) в Вашем приложении, работающем с базой.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 11:47:50
    #35501186
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Valentin Kotelnitski
Ссылочная целостность будет реализовываться (все проверки будут
производиться) в Вашем приложении, работающем с базой.

Большое зпасибо)
может есть идеи по поводу http://sql.ru/forum/actualthread.aspx?tid=588129
...
Рейтинг: 0 / 0
22.08.2008, 11:51:50
    #35501206
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Valentin KotelnitskiПравильно думаете насчет EntityTypeId и EntityId. Я считаю, что это естественное решение.Лучше так:
Код: plaintext
1.
2.
3.
4.
Entity1
...
EntityN
...
Comment (comment_id, subject, body, ..., entity1_id, ... entityN_id)
Не нужно лишний раз вводить пользовательскую типизацию. Все равно, с появлением нового типа (новой сущности), для которого будет требоваться комментарий, приложение будет дорабатываться.
Valentin KotelnitskiСсылочная целостность будет реализовываться (все проверки будут производиться) в Вашем приложении, работающем с базой.Реализовывать ссылочную целостность на уровне приложения плохо. Не надо подменять функционал СУБД.
...
Рейтинг: 0 / 0
22.08.2008, 12:40:18
    #35501363
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
_VVP_Не нужно лишний раз вводить пользовательскую типизацию
а что имеется ввиду?
Селекты всё равно под каждую сущность свои писать, чтобы вытащить комментарий.
Если у нас есть 10 млн. комментариев, то добавив сущность и поле EntiyN+1_Id получим
10 млн. NULL
Да и справочник типов сущностей всяко полезно иметь
Что-то не осознаю приемуществ о_О
...
Рейтинг: 0 / 0
22.08.2008, 13:14:22
    #35501461
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Sweet_Alkazar _VVP_Не нужно лишний раз вводить пользовательскую типизацию
а что имеется ввиду?
Селекты всё равно под каждую сущность свои писать, чтобы вытащить комментарий.
Если у нас есть 10 млн. комментариев, то добавив сущность и поле EntiyN+1_Id получим
10 млн. NULL
Да и справочник типов сущностей всяко полезно иметь
Что-то не осознаю приемуществ о_О
Тут уже проходила ссылка на топик Тома Кайта "Вопрос по дизайну" . Почитайте, очень полезно, там как раз на данную тему.

Про справочник типов сущностей - используйте стандартный словарь СУБД. Это значит, что любая реляционная СУБД предоставляет словарь таблиц. Например: oracle - all_objects и т.д., mssql 2k - sysobjects и т.д. Используйте комментарии к объектам СУБД.

Я хочу сказать, что эти словари уже есть, они доступны и их можно и нужно использовать. Попытка построить еще один словарь ничего нового не даст. На эту тему опять же процитирую Кайта:
КайтThis is not a made up data model, one that I crafted just to make a point. This is an
actual data model that I've seen people try to use. Their goal is ultimate flexibility.
They don't know what OBJECTS they need, they don't know what ATTRIBUTES they will have.
Well - that is what the database was written for in the first place: Oracle implemented
this thing called SQL to define OBJECTS and ATTRIBUTES and lets you use SQL to query
them. You are trying to put a generic layer on top of a generic layer - and it fails each
and every time except for the most trivial of applications.
ПереводЭто ( создание пользовательского словаря ) не построит модель данных, отличную от только что показанной ( типовой словарь СУБД ). Эта реальная модель данных, я видел людей, пытавшихся ее использовать. Их целью была ультрагибкость. Они не знали объектов, которые им нужны, и не знают аттрибутов этих объектов.
Ну что же - это как раз то, для чего база данных ( СУБД ) была написана: Oracle реализует эти вещи, вызывая SQL для определения объектов и аттрибутов, позволяя вам использовать SQL для доступа к ним.
Вы же пытаетесь ( you are trying to put ) положить общий уровень на общий уровень - это будет давать сбой всегда и каждый раз, кроме может быть тривиальных приложений.
...
Рейтинг: 0 / 0
22.08.2008, 13:24:49
    #35501492
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
_VVP_...
Спасибо за ссылку, про Тома Кайта давно слышу, останавливало то, что
с Oracle дело не имею, только SQL Server
..пошёл читать...
...
Рейтинг: 0 / 0
22.08.2008, 13:58:23
    #35501639
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
2VVP
Не годится для большого числа Entity.
И насчет селектов Sweet_Alkazar прав.
I also think he will know what objects he needs.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 14:03:17
    #35501656
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
По поводу http://sql.ru/forum/actualthread.aspx?tid=588129
Я думаю, что если в этом топике ты высказывал свои мысли, ты сам в состоянии решить поставленную задачу.
...
Рейтинг: 0 / 0
22.08.2008, 14:20:35
    #35501723
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Valentin KotelnitskiПо поводу http://sql.ru/forum/actualthread.aspx?tid=588129
Я думаю, что если в этом топике ты высказывал свои мысли, ты сам в состоянии решить поставленную задачу.
Да всё сомнения есть, т.к. и опыта мало, и в книгах об этом не читал
А ответственность моя, вдрух клиент к стенке припрёт - всё не так, всё не эдак,
а я ему - я со спецами консультировался, расслабтесь))))
...
Рейтинг: 0 / 0
22.08.2008, 14:49:49
    #35501835
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Sweet_Alkazarа я ему - я со спецами консультировался, расслабтесь))))Ну ну...
Сколько со спецами не консультируйся, а отвечать всеравно самому.
так что лучше - включать голову.
...
Рейтинг: 0 / 0
22.08.2008, 15:00:05
    #35501877
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Bely
Сколько со спецами не консультируйся, а отвечать всеравно самому.
Офф-топ так офф-топ)))
Не знаю как у вас, а у меня на начальника ссылка на форумчан, на книги, на статьи
действует лучше всего, причём если рассказывать о приемуществах подхода, его
логичности и т.п. - то может и не прокатить

Belyтак что лучше - включать голову.
делаю всё, что могу)
з.ы.Вот к нам стажёр пришёл, и если б я ему говорил -включай голову, на его вопросы,
а не конкретные решения конкретных задач, он бы время много потерял...
...
Рейтинг: 0 / 0
22.08.2008, 15:16:41
    #35501943
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Valentin KotelnitskiНе годится для большого числа Entity.
И насчет селектов Sweet_Alkazar прав.
I also think he will know what objects he needs.

1. Большое количество - это сколько? 10, 20, 30 сущностей - вполне нормальная таблица комментариев получиться. Вы попробуйте сделать alter table add column с дефолтом NULL на таблице 10 млн. записей в нормальной СУБД. Это влет отработает, вы даже не заметите, и размер не измениться. .

2. Насчет селектов , и кстати добавлений аттрибутов в сущность "комментарии".
Если создавать свой словарь: вы все равно будете заполнять словарь ваших данных - кучей insert`ов и потом править приложение, чтобы оно принимало новую сущность.
В конце концов можно каждую сущность спроектировать от предка, который знает свое имя и умеет сам построить запрос на получение комментариев - одно голое наследование в данном случае, причем с минимумом полиморфизма на задание названия сущности.
Примите соглашение об именовании и "будет вам счастье".

3. А я полагаю , что автор темы пока что не вполне хорошо представляет рамки своего проекта. Иначе разговоров о 10 млн. комментариев и N+1 сущностей не было бы. Причем N+1 трактуется как очень большое число.
...
Рейтинг: 0 / 0
22.08.2008, 15:24:18
    #35501975
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Неправильно.
Думаешь, считаешь - выкладываешь решение - смотришь на ответы - проверяешь
логически сам.
На книги можно, конечно, как на авторитетное мнение ссылаться.
Объясни твоему начальнику, что провал твоего проекта - это и его провал.
Если поймет - хорошо,
нет и ты будешь продолжать в том же духе - будешь сам постепенно задавливать
удавку на своей шее.
Think yourself!

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 15:47:39
    #35502070
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
_VVP_
Это влет отработает, вы даже не заметите, и размер не измениться. .
Подозревал, но не был уверен

_VVP_
2. Насчет селектов , и кстати добавлений аттрибутов в сущность "комментарии".
Если создавать свой словарь: вы все равно будете заполнять словарь ваших данных - кучей insert`ов и потом править приложение, чтобы оно принимало новую сущность.
В конце концов можно каждую сущность спроектировать от предка, который знает свое имя и умеет сам построить запрос на получение комментариев - одно голое наследование в данном случае, причем с минимумом полиморфизма на задание названия сущности.
Примите соглашение об именовании и "будет вам счастье".
1. Хм, чтобы полиморфизм заюзать в формировании селекта на клиенте
Код: plaintext
1.
"SELECT * FROM COMMENT WHERE EntityTypeId = " + Me.TypeId + 
" AND EntityId = " + Me.Id
- то завсегда
а вот
Код: plaintext
1.
"SELECT * FROM COMMENT WHERE " + Me.CommentFieldName + 
"  = " + Me.Id
- неожиданно слегка))
2. Откуда куча инсертов если создавать свой словарь(таблице EntityType) не пойму?
Имхо, Приложение править по трудоемкости, что там что там одинаково
_VVP_
3. А я полагаю , что автор темы пока что не вполне хорошо представляет рамки своего проекта. Иначе разговоров о 10 млн. комментариев и N+1 сущностей не было бы. Причем N+1 трактуется как очень большое число.
ссылочка просветляет, спасиба
раньше не думал, что сложность запросов может быть определяющей при построении БД
...
Рейтинг: 0 / 0
22.08.2008, 16:15:50
    #35502145
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Sweet_AlkazarПодозревал, но не был уверенДа, бывают неожиданные откровения.

Sweet_Alkazar
1. Хм, чтобы полиморфизм заюзать в формировании селекта на клиенте
Код: plaintext
"SELECT * FROM COMMENT WHERE EntityTypeId = " + Me.TypeId + " AND EntityId = " + Me.Id
- то завсегда
а вот
Код: plaintext
"SELECT * FROM COMMENT WHERE " + Me.CommentFieldName + "  = " + Me.Id
- неожиданно слегка))
Кстати, лучше строить параметрические запросы для конкрентных значений, а для выбора имени колонок использовать названия сущностей:
Код: plaintext
"WHERE "+Me.EntityName+"_ID = ?"
Тогда для каждой сущности у вас получиться статический запрос, который прокешируется в дереве запросов СУБД и не будет каждый раз парситься, и будет нормальное задание значений параметров.

Sweet_Alkazar2. Откуда куча инсертов если создавать свой словарь(таблице EntityType) не пойму?
Имхо, Приложение править по трудоемкости, что там что там одинаковоДа, по трудоемкости примерно одинаково.
Только в случае использования словаря СУБД, язык использования уже определен и стандартизован на мировом уровне - подмножество DDL языка SQL.
В случае своего словаря придется проектировать словарь, да еще и язык к нему (набор и последовательность INSERT, UPDATE и DELETE).

Sweet_Alkazarссылочка просветляет, спасиба
раньше не думал, что сложность запросов может быть определяющей при построении БДПожалуйста.
...
Рейтинг: 0 / 0
22.08.2008, 16:42:48
    #35502225
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
2VVP
Неэлегантно
...
Рейтинг: 0 / 0
22.08.2008, 17:10:53
    #35502292
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
Valentin Kotelnitski2VVP
НеэлегантноВалентин, вы бы потрудились почитать ссылку и даже оценить скорость работы.
Вот вам пример из соседнего раздела, который показывает 5-кратный проигрыш в скорости метода с "собственным" словарем по сравнению с этим "неэлегантным" (как вы изволили выразиться) методом.

В чем заключена ваша элегантность? Я не вполне понимаю.
Вам что-то мешает научить вашу систему использовать DDL там, где требуется работа с записью в словарь?
Зачем вы пытаетесь разработать СУБД поверх СУБД?

А по-моему элегантность статического словаря заключается в следующем:
1. Скорость выборок данных и даже изменений структуры СУБД на порядок выше.
2. Используется типовой язык определения словаря сущностей - SQL DDL.
3. Статический словарь позволяет "увидеть" графическое представление структуры БД - любые CASE или БД-менеджеры.
4. Словарь не надо проектировать, он уже есть в СУБД - возрастает скорость и универсальность разработки.

Наконец, хотите свой словарь? Сделайте систему въюх поверх sysobjects, syscomments, syscolumns и т.д. (для MSSQL, для Oracle тоже есть аналоги системного словаря) - вот вам собственный словарь.

Да, для контроля системного словаря может потребоваться словарь предметной области , который реализуется как отдельная сущность, и обладает функционалом проверки системного словаря на полноту и соответствие этой самой предметной области.
Но это другое и никак не участвует в типовой работе запросов на выборку и запись конечных данных.
...
Рейтинг: 0 / 0
22.08.2008, 17:35:36
    #35502350
Sweet_Alkazar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
_VVPКстати, лучше строить параметрические запросы для конкрентных значений, ...
Тогда для каждой сущности у вас получиться статический запрос, который прокешируется в дереве запросов СУБД и не будет каждый раз парситься, и будет нормальное задание значений параметров.

полезно как с вами общаться)))
...
Рейтинг: 0 / 0
24.08.2008, 16:00:12
    #35503402
Valentin Kotelnitski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии
2VVP
Скорость это не элегантность.
Запросы все равно писать по комментарию к каждой сущности.
Тип комментария - это логическая сущность.
То, что ссылочную целостность с ним нельзя реализовать на уровне базы,
это уже недостаток реляционной модели.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Комментарии / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]