Ссылка на сущность сервера SQL между таблицами - PullRequest
0 голосов
/ 29 сентября 2019

Я новичок в SQL-сервере и пытаюсь изучить возможности SQL:)

Мне нужна помощь в понимании того, как разные таблицы могут взаимодействовать друг с другом в одной и той же базе данных.Я знаю, что у сущности может быть внешний ключ со ссылкой на атрибут другой таблицы.Но как мне получить одну таблицу со ссылкой на множество разных таблиц?

Давайте рассмотрим пример.У меня есть простая база данных с таблицей автомобилей, велосипедов и лодок.Каждая из этих таблиц имеет атрибуты Id, Марка, Модель и Год.Теперь я хочу добавить таблицу Service с атрибутами IdService и ServiceNote в базу данных, где я хочу, чтобы каждый IdService ссылался на конкретную машину, велосипед или лодку из одной из трех таблиц.

Как я могу это сделать?Пожалуйста, смотрите простую схему, которую я приложил для лучшего понимания.

Simple diagram

1 Ответ

0 голосов
/ 29 сентября 2019

Вы просто включаете нужные столбцы.Вот один из методов:

create table services (
    servicesid int identity(1, 1) primary key,
    bikeid int references bikes(bikeid),
    boatid int references boats(boatid),
    carid int references cars(carid),
    servicenote nvarchar(max),
    check ((bikeid is not null and boatid is null and carid is null) or
           (bikeid is null and boatid is not null and carid is null) or
           (bikeid is null and boatid is null and carid is not null)
          )
);

Эта структура позволяет правильно объявлять отношения внешнего ключа.Ограничение check также гарантирует, что каждая строка взаимодействует только с одним объектом.

Некоторые базы данных поддерживают наследование в таблицах.Это позволит вам объявить «супер» тип для велосипедов, лодок и автомобилей с одинаковым идентификатором.Хотя вы можете сделать это без наследования, это немного громоздко.Для нескольких соединений часто достаточно явных ссылок (хотя это расточительно в том смысле, что пустые значения занимают место на страницах данных).

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