|
|
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Допустим, есть две таблицы (две сущности) Table1 и Table2. Эти сущности представлены в соответствующих разделах сайте. Хочется, чтобы пользователь мог оставлять комментарии на каждом из разделов - то есть необходимо создать таблицы Table1Comments и Table2Comments. По-моему, это не очень хорошо. Другой вариант - обойтись без связи между таблицами, что мне тоже не очень нравится. Может есть еще варианты, как это лучше сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:09 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Господа, есть ли профессиональные архитекторы БД? Как поступать в таком случае? Что с производительностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 17:38 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
[quot griZZZly] >>> Допустим, есть две таблицы (две сущности) Table1 и Table2. Допустим. >>> Эти сущности представлены в соответствующих разделах сайте. Раздел сайт к БД имеет очень отдаленное отношение. И что такое раздел сайта? HTML-страница, директория, веб-приложение ... >>> Хочется, чтобы пользователь мог оставлять комментарии на каждом из разделов Допустим. >>> то есть необходимо создать таблицы Table1Comments и Table2Comments. Совсем не необходимо >>> По-моему, это не очень хорошо. А почему собственно? >>> Другой вариант - обойтись без связи между таблицами, что мне тоже не очень нравится. Вы не говорили что у вас Table1Comments и Table2Comments как то и с чем то связаны >>> Может есть еще варианты, как это лучше сделать? Выбор варианта зависит от разных превходящих. Например Table 1 и 2 размещены на одном физическом устройстве - на разных устройствах Комментариев будет 1:1 или много:1 Какие выборки будут задаваться по комментариям. Да и вообще насколько критична производительность запросов к комментариям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 18:26 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Если правильно понял. Вот примерное решение для одной из таблиц с комментарием Table1Comment: Author_Name, Author_Origin (откуда), Author_IP (заполняетс я автоматически), CommentDateTime (заполняетс я автоматически), Comment То же самое для второй Можно предложтить авторам регистрироваться на сайте - тогда автора вынесете в отдельную таблицу и при формировании отчетов можно будет фильтровать комментарии по автору (а вдруг один автор оставит несколько комментариев) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 08:40 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
apapacy Например Table 1 и 2 размещены на одном физическом устройстве - на разных устройствах ИМХО, именно этот пункт рассматривать не нужно, DBA этим занимается Valentin Kotelnitski Вот примерное решение для одной из таблиц с комментарием.. А что если у нас N сущностей и к каждой есть комментарий. Правильно ли я понимаю, что паттерн селектор(в общей таблице комментариев есть поля EntityTypeId,EntityId и EntityId сслылается на таблицы в зависимости от EntityTypeId) уже стал общеупотребительным в таком случае? Можно ли тогда реализовать ссылочную целосность(скажем в SQL Server 2005)? Поделитесь своим опытом, ибо в книжках мало что написано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 09:49 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Правильно думаете насчет EntityTypeId и EntityId. Я считаю, что это естественное решение. Ссылочная целостность будет реализовываться (все проверки будут производиться) в Вашем приложении, работающем с базой. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 11:14 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski Ссылочная целостность будет реализовываться (все проверки будут производиться) в Вашем приложении, работающем с базой. Большое зпасибо) может есть идеи по поводу http://sql.ru/forum/actualthread.aspx?tid=588129 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 11:47 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Valentin KotelnitskiПравильно думаете насчет EntityTypeId и EntityId. Я считаю, что это естественное решение.Лучше так: Код: plaintext 1. 2. 3. 4. Valentin KotelnitskiСсылочная целостность будет реализовываться (все проверки будут производиться) в Вашем приложении, работающем с базой.Реализовывать ссылочную целостность на уровне приложения плохо. Не надо подменять функционал СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 11:51 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
_VVP_Не нужно лишний раз вводить пользовательскую типизацию а что имеется ввиду? Селекты всё равно под каждую сущность свои писать, чтобы вытащить комментарий. Если у нас есть 10 млн. комментариев, то добавив сущность и поле EntiyN+1_Id получим 10 млн. NULL Да и справочник типов сущностей всяко полезно иметь Что-то не осознаю приемуществ о_О ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 12:40 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
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 ) положить общий уровень на общий уровень - это будет давать сбой всегда и каждый раз, кроме может быть тривиальных приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 13:14 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
_VVP_... Спасибо за ссылку, про Тома Кайта давно слышу, останавливало то, что с Oracle дело не имею, только SQL Server ..пошёл читать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 13:24 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
2VVP Не годится для большого числа Entity. И насчет селектов Sweet_Alkazar прав. I also think he will know what objects he needs. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 13:58 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
По поводу http://sql.ru/forum/actualthread.aspx?tid=588129 Я думаю, что если в этом топике ты высказывал свои мысли, ты сам в состоянии решить поставленную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 14:03 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Valentin KotelnitskiПо поводу http://sql.ru/forum/actualthread.aspx?tid=588129 Я думаю, что если в этом топике ты высказывал свои мысли, ты сам в состоянии решить поставленную задачу. Да всё сомнения есть, т.к. и опыта мало, и в книгах об этом не читал А ответственность моя, вдрух клиент к стенке припрёт - всё не так, всё не эдак, а я ему - я со спецами консультировался, расслабтесь)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 14:20 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Sweet_Alkazarа я ему - я со спецами консультировался, расслабтесь))))Ну ну... Сколько со спецами не консультируйся, а отвечать всеравно самому. так что лучше - включать голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 14:49 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Bely Сколько со спецами не консультируйся, а отвечать всеравно самому. Офф-топ так офф-топ))) Не знаю как у вас, а у меня на начальника ссылка на форумчан, на книги, на статьи действует лучше всего, причём если рассказывать о приемуществах подхода, его логичности и т.п. - то может и не прокатить Belyтак что лучше - включать голову. делаю всё, что могу) з.ы.Вот к нам стажёр пришёл, и если б я ему говорил -включай голову, на его вопросы, а не конкретные решения конкретных задач, он бы время много потерял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 15:00 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
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 трактуется как очень большое число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 15:16 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Неправильно. Думаешь, считаешь - выкладываешь решение - смотришь на ответы - проверяешь логически сам. На книги можно, конечно, как на авторитетное мнение ссылаться. Объясни твоему начальнику, что провал твоего проекта - это и его провал. Если поймет - хорошо, нет и ты будешь продолжать в том же духе - будешь сам постепенно задавливать удавку на своей шее. Think yourself! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 15:24 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
_VVP_ Это влет отработает, вы даже не заметите, и размер не измениться. . Подозревал, но не был уверен _VVP_ 2. Насчет селектов , и кстати добавлений аттрибутов в сущность "комментарии". Если создавать свой словарь: вы все равно будете заполнять словарь ваших данных - кучей insert`ов и потом править приложение, чтобы оно принимало новую сущность. В конце концов можно каждую сущность спроектировать от предка, который знает свое имя и умеет сам построить запрос на получение комментариев - одно голое наследование в данном случае, причем с минимумом полиморфизма на задание названия сущности. Примите соглашение об именовании и "будет вам счастье". 1. Хм, чтобы полиморфизм заюзать в формировании селекта на клиенте Код: plaintext 1. а вот Код: plaintext 1. 2. Откуда куча инсертов если создавать свой словарь(таблице EntityType) не пойму? Имхо, Приложение править по трудоемкости, что там что там одинаково _VVP_ 3. А я полагаю , что автор темы пока что не вполне хорошо представляет рамки своего проекта. Иначе разговоров о 10 млн. комментариев и N+1 сущностей не было бы. Причем N+1 трактуется как очень большое число. ссылочка просветляет, спасиба раньше не думал, что сложность запросов может быть определяющей при построении БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 15:47 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Sweet_AlkazarПодозревал, но не был уверенДа, бывают неожиданные откровения. Sweet_Alkazar 1. Хм, чтобы полиморфизм заюзать в формировании селекта на клиенте Код: plaintext а вот Код: plaintext Кстати, лучше строить параметрические запросы для конкрентных значений, а для выбора имени колонок использовать названия сущностей: Код: plaintext Sweet_Alkazar2. Откуда куча инсертов если создавать свой словарь(таблице EntityType) не пойму? Имхо, Приложение править по трудоемкости, что там что там одинаковоДа, по трудоемкости примерно одинаково. Только в случае использования словаря СУБД, язык использования уже определен и стандартизован на мировом уровне - подмножество DDL языка SQL. В случае своего словаря придется проектировать словарь, да еще и язык к нему (набор и последовательность INSERT, UPDATE и DELETE). Sweet_Alkazarссылочка просветляет, спасиба раньше не думал, что сложность запросов может быть определяющей при построении БДПожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 16:15 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski2VVP НеэлегантноВалентин, вы бы потрудились почитать ссылку и даже оценить скорость работы. Вот вам пример из соседнего раздела, который показывает 5-кратный проигрыш в скорости метода с "собственным" словарем по сравнению с этим "неэлегантным" (как вы изволили выразиться) методом. В чем заключена ваша элегантность? Я не вполне понимаю. Вам что-то мешает научить вашу систему использовать DDL там, где требуется работа с записью в словарь? Зачем вы пытаетесь разработать СУБД поверх СУБД? А по-моему элегантность статического словаря заключается в следующем: 1. Скорость выборок данных и даже изменений структуры СУБД на порядок выше. 2. Используется типовой язык определения словаря сущностей - SQL DDL. 3. Статический словарь позволяет "увидеть" графическое представление структуры БД - любые CASE или БД-менеджеры. 4. Словарь не надо проектировать, он уже есть в СУБД - возрастает скорость и универсальность разработки. Наконец, хотите свой словарь? Сделайте систему въюх поверх sysobjects, syscomments, syscolumns и т.д. (для MSSQL, для Oracle тоже есть аналоги системного словаря) - вот вам собственный словарь. Да, для контроля системного словаря может потребоваться словарь предметной области , который реализуется как отдельная сущность, и обладает функционалом проверки системного словаря на полноту и соответствие этой самой предметной области. Но это другое и никак не участвует в типовой работе запросов на выборку и запись конечных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 17:10 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
_VVPКстати, лучше строить параметрические запросы для конкрентных значений, ... Тогда для каждой сущности у вас получиться статический запрос, который прокешируется в дереве запросов СУБД и не будет каждый раз парситься, и будет нормальное задание значений параметров. полезно как с вами общаться))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2008, 17:35 |
|
||
|
Комментарии
|
|||
|---|---|---|---|
|
#18+
2VVP Скорость это не элегантность. Запросы все равно писать по комментарию к каждой сущности. Тип комментария - это логическая сущность. То, что ссылочную целостность с ним нельзя реализовать на уровне базы, это уже недостаток реляционной модели. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2008, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35501656&tid=1543698]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 478ms |

| 0 / 0 |
