|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Подскажите, пожалуйста! Проектирую базу данных посещаемости учениками кружка. Необходимо все сделать в 3nf. У меня есть таблица "ученики" (с рядом атрибутов). И вот хочу сделать отдельную таблицу "посещаемость". Сразу сделал c атрибутами: ID, pupil_id, date. Но потом подумал, если придет, например, 10 учеников в одну дату (пускай 10.04.2021), то дата задублируется 10 раз и, как я думаю, будет уже не 3nf. Как вообще на практике это реализуется? Может это сделать через третью таблицу через связь многие-ко многим? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:30 |
|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Morskoi_kotikдата задублируется 10 раз и, как я думаю, будет уже не 3nf. Ты думаешь неправильно. Но таки да, попробуй создать справочник-календарь. Он может пригодиться в некоторых случаях. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:33 |
|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Morskoi_kotikдата задублируется 10 раз и, как я думаю, будет уже не 3nf. Ты думаешь неправильно. Но таки да, попробуй создать справочник-календарь. Он может пригодиться в некоторых случаях. Так а почему неправильно? (хочу разобраться). Потому, что это таблица фактов и в ней допустимы дубли дат? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:38 |
|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Morskoi_kotikПотому, что это таблица фактов и в ней допустимы дубли дат? Подумай на досуге чем дубли дат отличаются от дублей ссылок на таблицу с одним полем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:47 |
|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Morskoi_kotikПотому, что это таблица фактов и в ней допустимы дубли дат? Подумай на досуге чем дубли дат отличаются от дублей ссылок на таблицу с одним полем. Я это понимаю так, что если в справочнике с одним полем изменится значение этого поля, то соответственно по ссылке изменится значение во всех строках таблицы, где эта ссылка находится. Тут понятно, когда, например, изменится фамилия преподавателя, который ведет кружок (или категория преподавателя). Но дата... дата может измениться только в случае ошибки и поэтому справочник дат не нужен? Правильно? И дата по отсутствию избыточности данных приравнивается к ссылке? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 13:54 |
|
Как правильно соединить таблицы?
|
|||
---|---|---|---|
#18+
Morskoi_kotik, У Вас в таблице посещаемости будет одна и та же дата фигурировать по многу раз, как и ID занимающегося. Другой вопрос, что каждое сочетание "дата - ID занимающегося" должно быть уникальным, по идее. Ведь один человек ходит на кружок один раз в день. Если же занятия кружка проходят несколько раз в день, и один человек посещает не одно занятие конкретного кружка в день, а несколько (неважно по каким причинам) и Вы хотите и это тоже отслеживать, тогда надо добавить поле времени начала занятия или поле номера занятия кружка или что там у Вас есть. У Вас дата - это атрибут, а не сущность, так что всё в порядке. А то можно начать переживать ещё по поводу "АААА! У меня один человек ходит на один и тот же кружок двадцать раз в год! Не нарушит ли такая куча одинаковых pupil_id 3НФ? Что делать?". Всё в норме и с датами, и с pupil_id, не переживайте. Людей как сущность в отдельный справочник вынесли, и это правильно, и достаточно. Ну и если кружков несколько, тогда добавьте ещё в таблицу поле с id кружка. Это вариант строить таблицу типа pupil_id,дата1,дата2,дата3 - глупость и идиотизм, а у Вас всё верно. А если нужно будет получить отчёт вида pupil_id,дата1,дата2,дата3 - то его при помощи Pivot можно сделать из Вашей таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2021, 17:45 |
|
|
start [/forum/topic.php?fid=32&gotolast=1&tid=1539794]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 383ms |
0 / 0 |