Когато две таблици имат връзка много към много или когато една таблица има връзка много към много със себе си, можем да моделираме това с таблица за свързване.
Типът на връзката обаче може да надхвърли първоначалния тип, например:
Изисквания: имаме потребители. всеки потребител може да има 0 или повече други потребители като приятели
Решение: потребителска таблица и съединителна таблица, наречена "user_user".
След това откриваме ново изискване: някои приятелства са романтични или с други думи двама потребители могат да бъдат свързани по начин, различен от приятелството.
Решение a: добавете колона към съединителната таблица, която съдържа типа приятелство (приятел | партньор | бивш приятел) и т.н.
Решение b: преименувайте таблицата 'user_user' на 'friendships' (това би било по-добро име за начало с този подход) и създайте нова таблица, наречена romances, също свързвайки потребител с потребител.
След това откриваме още едно ново изискване: потребителите могат да дължат пари на други потребители. Отново можем да използваме същата съединителна маса или да създадем нова, наречена „дългове“. Този път интуицията ми е 100% да има отделна маса.
Всеки път, когато открием нов тип връзка или подтип на позната връзка, можем да добавим колона към една съединителна таблица или да създадем нова съединителна таблица.
Въпросът ми е какво е добро правило за решаване кога трябва да се създаде нова таблица?
Дали трябва да имаме повече от един ред на подредена двойка? Например, ако минали връзки никога не се изтриват, така че ако двама потребители са били приятели в миналото в продължение на две години, загубили са контакт и след това са се сприятелили отново, искаме да имаме и стария ред с начална и крайна дата, но с два реда дублира информацията в другата колона (старият ред показва, че потребителят дължи пари, новият не показва).
Дали, когато допълнителната колона не е логично определение на един тип връзка?
Добре: началната дата на приятелството е пряко свързана с приятелството 1 към 1
Не е добре: колоната за това колко пари един потребител притежава друг потребител може да бъде 1 към 1 за връзката, но логично не е описание на приятелството.
Ако знаем предварително, че две таблици ще имат много отношения много към много, това причина ли е да планираме много таблици за свързване или да направим една таблица за свързване, която е по-гъвкава (дори ако типът на връзката е не произволно)?