|
|
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть издательство, выпускающие различные журналы. Соответственно, есть выпуски журналов, в каждом журнале есть страницы, на каждой странице есть материалы. Спроектировал базу таким образом: в первичный ключ выпуска входит идентификатор журнала, в первичный ключ страницы входит идентификатор и журнала, и выпуска. Другими словами, выпуск связан зависимой связью с журналом, а страница связана зависимой связью с выпуском. Нормальный ли такой подход? Или правильнее было бы создать суррогатный ключ по таблицам выпусков и страницам? Вот структура данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Как видите, в таблице Material внешний ключ уже состоит из трех полей jrn_id, iss_id и cvr_id. И это не одна таблица, в которой есть внеший ключ на Cover. Подскажите, пожалуйста, нормальный ли такой подход? Или правильнее было бы создать суррогатный ключ по таблицам выпусков и страницам? Всем заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 13:35 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
Vetal Как видите, в таблице Material внешний ключ уже состоит из трех полей jrn_id, iss_id и cvr_id. И это не одна таблица, в которой есть внеший ключ на Cover. Подскажите, пожалуйста, нормальный ли такой подход? Или правильнее было бы создать суррогатный ключ по таблицам выпусков и страницам? Всем заранее спасибо! А зачем в таблице material ключ на журнал : ведь от материала к журналу можно прийти через таблицу со страницами - хотя в твоей конфигурации проще обработка данных именно с 3-мя ключами - хотя помоему налицо некоторая избыточность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 13:46 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
Vetal Подскажите, пожалуйста, нормальный ли такой подход? Или правильнее было бы создать суррогатный ключ по таблицам выпусков и страницам? Подход нормальный. Разве jrn_id , iss_id и .т.д. это не суррогатные ключи? На счёт правильнее - вопрос оптимизации. Длинный ключ занимает больше места в БД, для составных ключей получаются громоздкие условия соединения таблиц в запросах, но имея в таблице Material поле jrn_id мы можем сразу найти Journal без длинной цепочки соединений с промежуточными таблицами, из-за некоторой избыточности БД становится более устойчивой к ошибкам и сбоям. ИМХО, физические связи лучше реализовывать суррогатными ключами. В данном случае материалы физически связаны (напечатаны) со страницами, а страницы физически сшиты и образуют выпуск журнала. Связь выпуска с журналом логическая. О том что данная подшивка является известным журналом мы узнаём по надписи на обложке. PS. А если статья размещена на нескольких страницах? PPS. А что собственно интересного в странице. Ведь это по сути просто лист бумаги. Индивидуальность странице придают надписи и механическое размещение в журнеале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 14:11 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
LamazoidА зачем в таблице material ключ на журнал : ведь от материала к журналу можно прийти через таблицу со страницами В том от и дело, что у меня первичный ключ в таблице со страницами состоит из трех полей: jrn_id, iss_id и cvr_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 14:38 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
mcureenabРазве jrn_id , iss_id и .т.д. это не суррогатные ключи? Не совсем. jrn_id содержит номер журнала, который имеет смысл в нашей компании. iss_id - это номер журнала, который везде указан в самом журнале. cvr_id - да, суррогатный. На самом деле, я хотел спросить следующее: нормально ли использовать составной ключ jrn_id, iss_id, cvr_id для таблицы страниц, или лучше завести суррогатный ключ с одного поля для таблицы страницы? И еще. А если бы jrn_id и iss_id были не integer, а, например, varchar(256), это бы меняло ответ на мой вопрос? mcureenabPS. А если статья размещена на нескольких страницах? В наших журналах этого быть не может по определению. Потому что журнал электронный. mcureenabPPS. А что собственно интересного в странице. Ведь это по сути просто лист бумаги. Индивидуальность странице придают надписи и механическое размещение в журнеале. Например, по странице можно выбрать все материалы, которые на ней находятся. Кроме того, страница связана с баннерами, которые размещаются на этой же страницы. Таким образом, можно связать материалы с баннерами через страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 14:46 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
VetalВсем заранее спасибо! таблица "Статьи" Таблица "Журналы" Таблица "Публикации" поскольку статья, в принципе, может быть запросто опубликована в разных журналах или в одном издании в разных выпусках (вариации: в одном журнале но с продолжениями) а общая идея в том, что статья это отдельная сущность - литературное или публицистическое произведение не имеющее отношения к любому журналу до тех пор пока она именно в нем не опубликована tblPublications PublicationID ArticleID IssueID PageNum исходя из того, что у вас есть таблица выпусков журналов tblIssues IssueID MagazineID IssueNuber IssueDate и таблица статей авторов tblArticles ArticleID AutorID KeyWords ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 14:56 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
2зоранее благодарень: Спасибо огромное за мнение! Обязательно учту на будущее. зоранее благодарень поскольку статья, в принципе, может быть запросто опубликована в разных журналах или в одном издании в разных выпусках (вариации: в одном журнале но с продолжениями) Такого не может быть по специфике наших журналов. Статья четко привязана к странице наших электронных изданий (можно сказать, что страница - это рубрика издания) зоранее благодарень tblPublications PublicationID ArticleID IssueID PageNum tblIssues IssueID MagazineID IssueNuber IssueDate Исходя из этого, я так понимаю, вы предлагает в tblIssues все-таки за первичный ключ вы предлагаете взять простой ключ из одного поля IssueID, а не составной IssueID + MagazineID? Чем такой вариант лучше чем составной ключ? Именно этот вопрос я и задавал в моем топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 15:02 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
VetalИменно этот вопрос я и задавал в моем топике. здесь нет заведомо верного решения, ножно смотреть предметку... то что называется парадигма - либо вы изначально ограничиваете решения в рамках конкретного задания - только один ваш журнал и все остальное побоку, либо вы осталяете схему "на вырост". я рекомендовал бы (и делал бы сам) именно Issue как MainTable а MagazineID как атрибут Issue ключ, естественно по Issue - если в сферу ваших интересов будут попадать и журналы и брошюры и газеты вы сможете гибко подстроиться. по IssueID можно легко поднять Magazine, также легко делать выборки за период по IssueDate, например... ИМХО это совершенно очевидное решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 15:13 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
зоранее благодаренья рекомендовал бы (и делал бы сам) именно Issue как MainTable а MagazineID как атрибут Issue Issue - это страница журнала. А в журнале может быть много страниц. А одна страница может быть только в одном журнале. Именно поэтому Magazine является главной таблицей, а Issue ей быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 18:31 |
|
||
|
Зависимые связи - хорошо ли это?
|
|||
|---|---|---|---|
|
#18+
VetalПодскажите, пожалуйста, нормальный ли такой подход? На тему преимуществ и недостатков составных ключей уже сказано все, что можно сказать, в том числе на этом форуме, поиск в руки. Лично мне пришлось работать с базой, в которой некоторые первичные ключи доходили до 12, что ли, полей, а запросы, в котором десяток таблиц линковался по шести-восьми полям на каждую связь, были в порядке вещей. Не скажу, что мне это сильно понравилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 18:42 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34427703&tid=1544608]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 471ms |

| 0 / 0 |
