Подключение к базе данных - Дизайн базы данных - Родитель - Ребенок - ребенок ребенка - PullRequest
0 голосов
/ 02 октября 2019

У меня есть вопросы по проектированию баз данных - что и как лучше всего сделать. Вот как я обычно это делаю. ^^

Простой пример: у меня есть 3 таблицы

Таблица пользователей

user_id      name     
2           Name1     
3           Name2 

Таблица возможностей

facility_id      facility_name     user_id
13                facility1            2
14                facility2            3

Таблица пола (это то, что ямогу ли я добавить здесь идентификатор пользователя ^ _ ^)

floor_id      floor_name      facility_id       ( user_id )
5             floor1             13                  2
6             floor2             14                  3

Так что здесь вам не нужно добавлять подключение пользователя к таблице этажей, потому что у вас есть его для объекта, к которому подключен стол этажа ..

но я все равно добавляю его для упрощения запросов ... это плохая практика?

1 Ответ

1 голос
/ 02 октября 2019

Я вижу удобство того, что user_id в таблице «Этаж» позволяет вам выполнить одно присоединение к таблице «Пользователи». Однако существует вероятность несоответствия. Допустим, кто-то вручную ввел в базу данных:

floor_id      floor_name      facility_id       ( user_id )
5             floor1             13                  2
6             floor2             14                  2

Теперь, если вы доберетесь до пользователя через средство, мы получим пользователя 3, и если мы перейдем непосредственно от пола к пользователю, мы получим пользователя 2.

Согласованность можно обеспечить, указав, что отношение внешнего ключа между объектом и полом находится в двух столбцах (user_id, facility_id). Вы по-прежнему можете присоединиться к Floor to User, но даже вручную ввести несогласованный (facility_id, user_id) в Floor невозможно, пара должна соответствовать существующей строке в Facility (id, user_id).

...