В прошлом уроке мы перевели почти всю онлайн-школу в таблицы. Осталась одна сущность, которая не влезла в правила: урок курса. У него есть номер, но номер «3» встречается и в курсе SQL, и в курсе Python. Сам по себе он ничего не опознаёт. Этот урок про такие сущности: как их узнать на диаграмме и как хранить в таблицах.
Квартира 15
Скажи почтальону «отнеси в квартиру 15», и он спросит: «в каком доме?» Квартир с номером 15 в городе тысячи. Номер квартиры опознаёт её только вместе с домом: «Ленина 8, квартира 15».
Квартира это классическая слабая сущность. У неё нет своего ключа, она опознаётся только через другую сущность, дом. Дом называют владельцем. Сущности с собственным ключом, вроде дома или студента, называют сильными.
У слабой сущности есть два признака:
- Нет собственного ключа. Её атрибуты в одиночку не опознают экземпляр.
- Без владельца не существует. Снесли дом, исчезли и его квартиры. Удалили курс, его уроки потеряли смысл.
Частичный ключ
Номер квартиры всё-таки не бесполезен: внутри одного дома он уникален. Такой атрибут называют частичным ключом, или дискриминатором. Полный ключ слабой сущности собирается из двух частей:
ключ владельца + частичный ключ = полный ключ
адрес дома + номер квартиры = «Ленина 8, кв. 15»
id курса + номер урока = «курс 7, урок 3»
Связь между слабой сущностью и владельцем называют идентифицирующей: она не просто связывает, а участвует в опознании.
Как это рисуют
В нотации Чена слабую сущность обводят двойной рамкой, идентифицирующую связь двойным ромбом, а частичный ключ подчёркивают пунктиром. В «вороньей лапке» отдельного значка нет, слабость видно по ключу: ключ владельца входит в первичный ключ слабой сущности.
┌──────────┐ ╔══════════════╗
│ Курс ├┼─────────○<║ Урок ║
└──────────┘ состоит из ╚══════════════╝
id номер (частичный ключ)
название тема
Сравни с сильной сущностью «студент»: у студента свой ключ, почта, и он существует без курсов.
дальше после входа
Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.
Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.