|
|
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
При проектирование БД столкнулся с множеством противоречивых мнений о том, могут ли (или является ли плохим признаком) существовать в БД циклические связи (идентифицирующие, не идентифицирующие). Хотелось бы услышать много мнений и аргументов в поддержку того или иного довода. Вот простой пример т.н. циклической связи: Таблица игры, в ней содержится информация о всех играх (содержит только PK GameID). Таблица игроки - в ней содержится информация о всех игроках учавствующих в ОДНОЙ игре (содержит FK GameID). Таблица раунды - в ней содержатся ВСЕ раунды ОДНОЙ игры (содержит FK GameID) Таблица Ставки - в ней хранятся все ставки, сделанные любым из игроков в любом раунде любой игры. (содержит FK PLayerID, FK RoundID). Является ли такая архитектура правильной и/или желательной/нежелательной ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 15:37 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> При проектирование БД столкнулся с множеством противоречивых мнений о том, могут > ли (или является ли плохим признаком) существовать в БД циклические связи Могут, не является плохим признаком. > (идентифицирующие, НЕ МОГУТ по определению. не идентифицирующие). Могут. Хотелось бы услышать много мнений и > аргументов в поддержку того или иного довода. Тут не может особенно быть никаких аргументов. Надо тебе по предметной области циклические связи -- делай. И есть случаи, когда их просто нельзя сделать (2 и более идентифицирующие связи не могут быть циклическими, одна из связей цикла должна быть неидентифицирующей и допускать NULL, иначе ты данные просто не вставишь). > Вот простой пример т.н. циклической связи: > Таблица игры, в ней содержится информация о всех играх (содержит только PK GameID). > Таблица игроки - в ней содержится информация о всех игроках учавствующих в ОДНОЙ > игре (содержит FK GameID). > Таблица раунды - в ней содержатся ВСЕ раунды ОДНОЙ игры (содержит FK GameID) > Таблица Ставки - в ней хранятся все ставки, сделанные любым из игроков в любом > раунде любой игры. (содержит FK PLayerID, FK RoundID). А где ты тут нашёл циклические ссылки ? Их тут нет, или я что-то не так понял. У тебя направление ссылки К Bets (ставки). Вот если бы одна из связей на Bets была бы направлена в другую сторону, был бы цикл. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 15:47 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
Я сталкивался и с такими мнениями (преподавателей), что не важно, в какую сторону идут связи, если они образуют "круг", то это уже плохо. Моё, конечно, мнение, что в данном примере всё красиво, нет необходимости что-либо переделывать или пытаться сделать лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 16:06 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
pashalost, В теории БД нет понятия "циклические связи", "идентифицирующие связи", "не идентифицирующие связи". Если же это понятия "реляционной теории", то напомню, что связи в реляционной модели принципиально не поддерживаются. Сообщите это своим преподавателям. Чтобы они не морочили голову, по крайней мере, следующим поколениям:) А у Вас откуда такая жестокость - уничтожать игроков, чтобы они не имели возможности поучаствовать еще в одной игре?:) Или Игрок - это не Человек? Типы сущностей нужно именовать в единственном числе. И почему Вы используете иностранный язык - тоже преподаватели научили?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 16:42 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> столкнулся с множеством противоречивых мнений Не читайте то, что пишут на заборах. Любые циклические связи - это ошибки проектирования. > Вот простой пример Это хороший пример плохой структуры. Либо задача поставлена криво, либо - судя по вопросу, это вероятнее - безобразна реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 16:43 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
тут нет циклов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 16:50 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
Бредятина, (ржу немогу с ника) с чего вы взяли, что я уничтожаю игроков после игры ? Данный пример маленький кусочек, вырванный из моего проекта. Мне ПОЗАРЕЗ необходимо запомнить СОСТАВ игроков в каждой игре. К сведению, состав игроков от игры к игре может изменяться, поэтому его и храним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:24 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621, обоснуйте ваше суждение, почему не должно с структуре БД существовать "циклических связей" и дайте точную формулировку т.н. циклической связи. Поясню задачу, которую должна выполнять БД. Необходимо собирать статистику всех ставок сделанных игроками во время игры. Важно знать, кто, в каком раунде, и в какой игре сделал ставку (размер ставки тоже необходимо знать). В одной игре учавствует несколько игроков (2-10). Игра состоит из нескольких раундов (1-5). Состав игроков от игры к игре может изменится. Попробуйте(если вас не затруднит) прежложить свой вариант решения поставленной задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:33 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> Я сталкивался и с такими мнениями (преподавателей), что не важно, в какую > сторону идут связи, если они образуют "круг", то это уже плохо. ТЫ НЕ ТАК ПОНЯЛ. В БД все связи направленные, соотв. цикл надо искать как в орграфе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:52 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> В теории БД нет понятия "циклические связи", "идентифицирующие связи", "не > идентифицирующие связи". Если же это понятия "реляционной теории", то напомню, > что связи в реляционной модели принципиально не поддерживаются. Сообщите это > своим преподавателям. Чтобы они не морочили голову, по крайней мере, следующим > поколениям:) Ну, это заявления подстать нику, это мы пропускаем... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:53 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
On 05/31/2012 05:43 PM, guest_20040621 wrote: > Не читайте то, что пишут на заборах. Любые циклические связи - это ошибки > проектирования. Интересно, почему пользователь "Бредятина" не зналогинился ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:55 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
On 05/31/2012 06:33 PM, pashalost wrote: > guest_20040621, обоснуйте ваше суждение, почему не должно с структуре БД > существовать "циклических связей" и дайте точную формулировку т.н. циклической > связи. Да не обращай ты внимание на гестов. Это ж гест, ему соврать -- не дорого взять. Поясню задачу, которую должна выполнять БД. Необходимо собирать Ещё раз, проясни для себя -- У ТЕБЯ НЕТ ЦИКЛОВ в твоей текущей БД. Тебе не о чем беспокоиться. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 17:58 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
MasterZivВ БД все связи направленные, соотв. цикл надо искать как в орграфе.Хм, связи 1:1 вроде как ненаправленные. Хотя используются довольно редко. По сабжу - один из способов хранение иерархий id+parent_id уже сам по себе содержит цикл. Что ж теперь, из-за какого-то препода отказываться от такого способа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 18:02 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
guest = troll ? :) Всё больше склоняюсь к мнению, что не все люди (даже из числа тех, кто знает, что такое SELECT * FROM A JOIN B WHERE ...) до конца понимают, что такое циклическая связь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 18:52 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> В БД все связи направленные, соотв. цикл надо искать как в орграфе. > > Хм, связи 1:1 вроде как ненаправленные. Хотя используются довольно редко. Связь -- это FOREIGN KEY, как он может быть ненаправленный ? Не, ну конечно при 1:1 ты можешь сделать два встречных FK, только записи как вставлять потом ? > По сабжу - один из способов хранение иерархий id+parent_id уже сам по себе > содержит цикл. Что ж теперь, из-за какого-то препода отказываться от такого способа? Там цикл разорваный (т.е. допустимый). Разорваный тем, что связь необязательная, parent_id всегда NULL-able. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 19:05 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> почему не должно с структуре БД существовать "циклических связей" Потому, что это свидетельствует о явной ошибке. Почему это ошибка - читайте Дейта. > Поясню задачу Вы не поясняете задачу, вы рассказываете о вашей интерпретации задачи. Любые игры имеют правила. Любая реализация базы данных для регистрации состояний участников игры и ее результатов - реляционное описание этих правил. Описанный вами вариант прост: игроки, игра, состав участников игры (игра, игроки), раунд (игра, шаг, игрок, ставка) или раунд (игра, шаг), ставка (игрок, раунд, шаг ставки, номинал ставки), если в одном раунде игрок может делать несколько ставок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 19:15 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
MasterZivНе, ну конечно при 1:1 ты можешь сделать два встречных FK, только записи как вставлять потом ?1) в некоторых СУБД FK могут быть отложенными и проверяются в момент commit-а. 2) в некоторых СУБД FK нет вообще, но это не мешает установить логическую связь между таблицами. MasterZivТам цикл разорваный (т.е. допустимый). Разорваный тем, что связь необязательная, parent_id всегда NULL-able.Хм, пытаюсь представить себе "неразорванный" цикл. Что-то ничего не приходит в голову, кроме совсем уж абсурдных вариантов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 19:29 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
pashalostБредятина, (ржу немогу с ника) с чего вы взяли, что я уничтожаю игроков после игры ? Данный пример маленький кусочек, вырванный из моего проекта. Мне ПОЗАРЕЗ необходимо запомнить СОСТАВ игроков в каждой игре. К сведению, состав игроков от игры к игре может изменяться, поэтому его и храним Я так и понял:) что Игрок - это участие человека в игре... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 20:35 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
MasterZiv > В теории БД нет понятия "циклические связи", "идентифицирующие связи", "не > идентифицирующие связи". Если же это понятия "реляционной теории", то напомню, > что связи в реляционной модели принципиально не поддерживаются. Сообщите это > своим преподавателям. Чтобы они не морочили голову, по крайней мере, следующим > поколениям:) Ну, это заявления подстать нику, это мы пропускаем... Не обманывайте себя:) Это импульс к размышлению, только дурак может пропустить:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 20:40 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 05/31/2012 05:43 PM, guest_20040621 wrote: > Не читайте то, что пишут на заборах. Любые циклические связи - это ошибки > проектирования. Интересно, почему пользователь "Бредятина" не зналогинился ? Я, Чернышев Андрей Ленидович, не раз логинился. Сразу же блокируют. Здесь же БД нельзя обсуждать:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 20:43 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
pashalostguest = troll ? :) Всё больше склоняюсь к мнению, что не все люди (даже из числа тех, кто знает, что такое SELECT * FROM A JOIN B WHERE ...) до конца понимают, что такое циклическая связь. Я Вам открою секрет - никто не понимает:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 20:45 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
MasterZiv > В БД все связи направленные, соотв. цикл надо искать как в орграфе. > > Хм, связи 1:1 вроде как ненаправленные. Хотя используются довольно редко. Связь -- это FOREIGN KEY, как он может быть ненаправленный ? Не, ну конечно при 1:1 ты можешь сделать два встречных FK, только записи как вставлять потом ? > По сабжу - один из способов хранение иерархий id+parent_id уже сам по себе > содержит цикл. Что ж теперь, из-за какого-то препода отказываться от такого способа? Там цикл разорваный (т.е. допустимый). Разорваный тем, что связь необязательная, parent_id всегда NULL-able. FK - это ограничение целостности, а не связь. В "реляционных системах" связи принципиально не поддерживаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 20:46 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> В "реляционных системах" связи принципиально не поддерживаются Вот это действительно высший бред. Можно сказать "апофеоз бреда". Relation - в переводе с английского означает СВЯЗЬ. Они именно потому так и называются, что основаны на СВЯЗЯХ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 21:46 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
> Вот это действительно высший бред. Вы заблуждаетесь. В данном случае Бредятина абсолютно прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 22:00 |
|
||
|
циклические связи в БД
|
|||
|---|---|---|---|
|
#18+
On 05/31/2012 08:15 PM, guest_20040621 wrote: > Потому, что это свидетельствует о явной ошибке. Почему это ошибка - читайте Дейта. Ни о чём это не свидетельствует. Топикстартер, не поддавайся на провокации всяких гестов ! Я тебе всё достаточно понятно уже объяснил. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2012, 23:07 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37819895&tid=1541570]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 479ms |

| 0 / 0 |
