powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос
25 сообщений из 26, страница 1 из 2
Теоретический вопрос
    #32974706
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У студента есть номер зачетки. Напрмер 023110 (моя). Как правило он используется в качестве внешнего ключа. Соответственно - атомарное значение
Но вот возник геморой головного мозга: помимо номера зачётки в базе есть запись группа, факультет и год поступления. Но собственно номер зачётки содержит всё это:
0231 - Номер группы вообще. 2 - год поступления (2002). 3 - факультет. 1 - номер группы на потоке. Соответственно номер зачётки - не атомарное значение. И в качестве ключа использоваться не должно. Если добавить записи с факультетом, группой и иже с ними, то получим не нужную избыточность. Если добавим автоинкрементный id сделаем работу, которую уже сделал ректорат:) Если разбить номер зачётки типа вот:
Код: plaintext
1.
2.
факультет|год поступления|группа на потоке
                3|                          2|                            1                 
то лишимся ключа.

А так ключь не атомарный использовать можно?
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32974829
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте смотреть, какие есть варианты.

1. Суррогатный ключ плюс поле "номер зачетки" плюс дополнительные поля. Минус - избыточность; впрочем, для студентов это малопринципиально - максимум лишний десяток мегабайт.

2. Ключ из нескольких полей. Реальный геморрой всем, кто будет писать запросы на эту таблицу.

3. Использование номера зачетки как ключа плюс некоторое количество вычисляемых полей, расшифровывающих этот номер. Минус - обычный для такого подхода: а не будет ли "случая на миллион", когда сделанное предположение окажется неверным.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32974852
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, что не читал, везде (в том числе вузовские учебники) номер зачётки - ключ внешний.

Мне вот, что интересно: можно ФАКТИЧЕСКИ не атомарное значение хранить в реляцеонной базе?
Можно неатомарное значение использовать в качестве ключа.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32974890
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Мне вот, что интересно: можно ФАКТИЧЕСКИ не атомарное значение хранить в
> реляцеонной базе?

Можно.

> Можно неатомарное значение использовать в качестве ключа.

Можно. Если оно уникально. Встречный вопрос: зачем? Чем суррогатные ключи не устраивают?
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32974922
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем изобретать велосепед?
Ведь есть хороший ключь.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32975005
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Ведь есть хороший ключь.

Хороший ключ - суррогатный ключ. Потому как абсолютно независимый.

Подумайте на досуге, какие потенциальные проблемы создаст Вам использование естественного ключа в описанном случае, если изменится алгоритм нумерации зачеток.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32975105
Смотрящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не говоря о том, что зачетку можно потерять, уйти в академ, изменить специальность (изменить факультет) и т.п.... и получится , что это уже другой студент
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32975254
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinМне вот, что интересно: можно ФАКТИЧЕСКИ не атомарное значение хранить в реляцеонной базе?
Фактически - можно, ИИ СУБД пока что не блокирует таких попыток :). Формально - надо понимать, почему теория настаивает на атомарных значениях; понимать недостатки этого подхода.

Лично с моей точки зрения здесь слишком мелкий выигрыш, чтобы ради него отступать от теории и конструировать будущие проблемы. Ну, сэкономите Вы на студенте десять байт. Сколько их? Даже если с историей - 50.000 наберется? Итого сэкономите аж полмега диска и соответствующую долю оперативки и ввода-вывода.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32975319
AIM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sarin.

Однажды, в одном ВУЗе, студентам выдавались логины по номерам зачеток, и как то раз сверху спустили дублирующиеся номера зачеток. Столько нецензурной брани от сисадмина в тот день никто раньше никогда не слышал.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32977373
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт атомарных значений слышал/читал. Они нужны, чтоб база была в 1НФ.

Правильно?
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32977554
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinНасчёт атомарных значений слышал/читал. Они нужны, чтоб база была в 1НФ.
1НФ - не самоцель. Важно понимать, что они дают - или от чего придется отказаться.

Во-первых, атомарные значения - требование, направленное на ликвидацию "перечисления в строке". В этой структуре такого не наблюдается. Во-вторых, атомарные значения гарантируют, что операции с ними пройдут "легко и просто". Лично я бы предпочел таки иметь независимые поля для года и остального - но если не хочется, существующие сегодня механизмы позволяют обеспечить это "легко и просто" без заметных проблем.

Соответственно, в данном случае нет особых причин возражать против структуры "похожей на 3НФ, но с неатомарным значением". Возражения сводятся к естественным недостаткам естественных ключей.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32979755
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer SarinНасчёт атомарных значений слышал/читал. Они нужны, чтоб база была в 1НФ.
1НФ - не самоцель. Важно понимать, что они дают - или от чего придется отказаться.

Во-первых, атомарные значения - требование, направленное на ликвидацию "перечисления в строке". В этой структуре такого не наблюдается. Во-вторых, атомарные значения гарантируют, что операции с ними пройдут "легко и просто". Лично я бы предпочел таки иметь независимые поля для года и остального - но если не хочется, существующие сегодня механизмы позволяют обеспечить это "легко и просто" без заметных проблем.

Соответственно, в данном случае нет особых причин возражать против структуры "похожей на 3НФ, но с неатомарным значением". Возражения сводятся к естественным недостаткам естественных ключей.

Самоцелью вроде является ликвидация возможности возникновения аномалий.

Я серьёзные базы не лепил. Всё, что делал сразу получалось в 5НФ.

Купил себе умную книжку. Там, кстати, в сетевых ресурсах sql.ry четвёртой строкой:)
Читаю и внимаю. Мне очень интересну базы данных, а вуз не профильный. Вот и учусь по книгам, статьям да на форуме.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32980586
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinСамоцелью вроде является ликвидация возможности возникновения аномалий.
Именно. Возможность каких именно аномалий Вы видите в данном случае?
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32980770
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще я боялся избыточности. Но наверное лучше будет сделать сурогатный ключь. Номер зачётки вообще исключить, а при необходимости генерить его на основании факультета, года поступления группы и т.д.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32980848
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinВообще я боялся избыточности.
Ее неприятные эффекты в данном случае легко устраняются. Например - триггером или вьюхой. Если же иметь в виду избыточность суррогатного ключа при наличии естественного - она сама по себе настолько минимальна и безобидна, что имеет смысл в основном в религиозных спорах.

Sarin Но наверное лучше будет сделать сурогатный ключь.
Это позволит убрать минусы естественного ключа. Поскольку Вы неопытны - это хорошая мысль; у суррогатного ключа нет "потенциальных будущих проблем".

Sarin Номер зачётки вообще исключить, а при необходимости генерить его на основании факультета, года поступления группы и т.д.
Может быть, именно так. Может быть, имеет смысл иметь альтернативный ключ; не так часто, но иногда удобно сослаться на таблицу не по первичному ключу. Генерить просто так, боюсь, не удастся - если нет какого-нибудь глупого понятия типа "номер студента в группе".
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32980971
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупое понятие номер студента в группе как раз есть. Это две последнии цифры номера зачётки.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32980999
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinГлупое понятие номер студента в группе как раз есть. Это две последнии цифры номера зачётки.
Его нет как поля, которое имеет самостоятельный смысл. Полагаю, ни в какой ситуации от Вас не требуется ввести или вывести "номер студента в группе". Фактически Вам придется решить, иметь в таблице поле "номер зачетки" либо иметь в ней поле "номер студента в группе". Также стоит отметить, что само по себе объективно существующее понятие "номер студента в группе" может меняться после каждой сессии - что вряд ли соответствует номерам зачеток.

Лично я выбрал бы "иметь номер зачетки". Сделав в интерфейсе его генерацию по указанным правилам. Потерь здесь - опять же считанные байты места. Преимущества - упрощение программы, а также устойчивость к коллизиям (например, студента перевели в другую группу - вряд ли ему при этом меняют зачетку).
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32981048
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически должны номер зачётки сменить.
Ведь в другой группе есть студент с таким же номером_студента_в_группе. А он используется для определения варианта задачи на курсовик, или контрольную. И ещё много где.

Избыточность в 25 байт на запись в общем не критична, как я понял.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32981814
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
мдя...

а кому вообще пришла в голову идея кодировать (номеровать) зачетки таким макаром и главное какова цель и идея такого кодирования?


кино и немцы...

про возможные коллизии в системе учета я уш и не говорю

Sorry - не сдержался...
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32981825
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Веришь, не я это придумал.

Вообще-то я не пишу сейчас ничего такого. Просто возник вопрос. Я, как уже говорил, на форуме учусь
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32981845
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
SarinВеришь, не я это придумал.

верю...

никогда не используй в качестве ключа то, ты (или твое приложение) не контролируе(ешь/ет) - используй Autoincrement

выданный ректоратом номер зачетки - это только условно-справочная (при таком раскладе) информация
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32981855
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32982177
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarinпомимо номера зачётки в базе есть запись группа, факультет и год поступления. Но собственно номер зачётки содержит всё это
В корне неверное утверждение. В номере зачетки группа, специальность, год поступления, номер студент шифруются на момент выдачи зачетки. В дальнейшем они могут смениться, а номер зачетки - нет. Поэтому нельзя рассматривать номер зачетки как источник данных о студенте. Его следует трактовать как атомарный атрибут, значени которого кто-то где-то формирует по какому-то алгоритму. Но полагаться на "зашифрованные" в номере поля недопустимо.
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32982206
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinТеоретически должны номер зачётки сменить.
Хм. Странно это :) По такой практике одна моя знакомая поменяла бы зачетку минимум три раза. А сколь помню - весь универ по одной отходила. И что-то мне подсказывает, что менять зачетку - большой бумажный геморрой.

SarinВедь в другой группе есть студент с таким же номером_студента_в_группе. А он используется для определения варианта задачи на курсовик, или контрольную. И ещё много где.
Ну и лафа у вас. То есть: все четные садятся справа, все нечетные - слева, и списывают :)

SarinИзбыточность в 25 байт на запись в общем не критична, как я понял.
Во-первых некритична - не то число записей. А во-вторых, что-то многовато байт получается - типа десятичной записи числа в юникоде :)
...
Рейтинг: 0 / 0
Теоретический вопрос
    #32982314
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну 25 байт это я так, с потолка взил. На самом деле 10-15.

Лафа у нас по другой причине Вуз халявный. А вариантов заданий 10 штук минимум. И совпадают они у двух трёх человек:)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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