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

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

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

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

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

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

Можно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

верю...

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

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

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

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

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


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