В чем разница между связями на основе таблиц и связями на основе столбцов в РСУБД? - PullRequest
1 голос
/ 25 июля 2010

В своих проектах я часто использовал отношения на основе столбцов:

CREATE TABLE `user` (
id INT AUTO_INCREMENT PRIMARY KEY,
usergroup INT
);

CREATE TABLE `usergroup` (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);

однако, на работе кажется, что некоторые люди делают это с помощью табличных отношений, таких как:

CREATE TABLE `user` (
id INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE `usergrouprelation` (
userid INT,
usergroupdid INT
);

CREATE TABLE `usergroup` (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);

и мне интересно, каковы плюсы и минусы обоих подходов? И каков официальный термин для этого?

Ответы [ 3 ]

3 голосов
/ 25 июля 2010

Отношения разные.

В вашем первом примере отношения один ко многим.Одна группа может иметь много пользователей.(пользователь может быть только в одной группе)

Во втором примере отношения «многие ко многим».Многие группы могут иметь много пользователей.(пользователь может входить в более чем одну группу, а в группах может быть более одного пользователя)

В этом разница между ними, обычно используют промежуточную таблицу для разрыва отношений между многими.1007 *

1 голос
/ 25 июля 2010

Если у вас есть отношения «многие ко многим», вы должны идти вторым путем.Но если у вас есть отношение «один ко многим» или «многие к одному», вы можете выбрать любой из двух вариантов (но второй более расширяемый).

См. Подробнее: Отношения базы данных

1 голос
/ 25 июля 2010

В этом нет общих плюсов или минусов.Я бы назвал ваши «отношения на основе столбцов» отношением 1: n, а ваши «отношения на основе таблиц» - отношением: m.

1: n означает, что каждый пользователь может относиться к нулю или 1 группе пользователей и каждомугруппа пользователей может быть связана со многими пользователями.

n: m означает, что каждый пользователь может быть связан с нулем для многих групп пользователей и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...