powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь таблиц
6 сообщений из 6, страница 1 из 1
Связь таблиц
    #39821263
eleau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
CREATE TABLE Type_instrumenta
(
    Kod_type_instrumenta INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    Nazvanie_type_instrumenta VARCHAR(20) NOT NULL DEFAULT 'akzii',
    UNIQUE (Nazvanie_type_instrumenta),
    CHECK (Nazvanie_type_instrumenta IN ('akzii', 'futures'))
);
 
CREATE TABLE Instruments
(
    Kod_instrumenta INT NOT NULL PRIMARY KEY IDENTITY(2,3),
    Nazvanie_instrumenta VARCHAR(20) NOT NULL,
    Kod_Type_instrumenta INT NOT NULL DEFAULT 'akzii',
    CHECK (Nazvanie_instrumenta LIKE CASE WHEN Nazvanie_type_instrumenta = 'futures' THEN '[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я]-[0-9].' + RIGHT(str(YEAR(getdate())), 2) ELSE '%' END),
    FOREIGN KEY (Kod_type_instrumenta) REFERENCES Type_instrumenta(Kod_type_instrumenta) ON DELETE cascade
);
 
CREATE TABLE Schet
(
    Nomer_scheta INT NOT NULL PRIMARY KEY IDENTITY(10000000,1) CHECK (Nomer_scheta <= 99999999),
    familia VARCHAR(20) NOT NULL,
    imya VARCHAR(20) NOT NULL,
    otchestvo VARCHAR(20) NOT NULL
);
 
CREATE TABLE Sdelki
(
    Kod_sdelki INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    nomer_scheta INT NOT NULL,
    FOREIGN KEY (nomer_scheta) REFERENCES Schet(nomer_scheta) ON DELETE cascade,
    datavremya_otkrytiya datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    datavremya_zakrytiya datetime NULL,
    kolichestvo REAL CHECK (kolichestvo>0),
    Kod_instrumenta INT NOT NULL,
    FOREIGN KEY (Kod_instrumenta) REFERENCES Instruments(Kod_instrumenta) ON DELETE cascade,
    napravlenie_sdelki VARCHAR(10) NOT NULL DEFAULT 'long' 
    CHECK (napravlenie_sdelki IN ('long', 'short')),
    CHECK (datavremya_zakrytiya > datavremya_otkrytiya)
);



Как правильно сослаться при создании таблицы Instruments на поле Nazvanie_type_instrumenta, находящееся в таблице Type_Instrumenta, без добавления этого поля в таблицу Instruments? Если название типа инструмента = futures (из первой таблицы), то название инструмента имеет такой-то формат (вторая таблица)
...
Рейтинг: 0 / 0
Связь таблиц
    #39821292
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eleau,

Ван нужна таблица соответствий типов и инструментов, а для проверочного ограничения создайте скалярную функцию, которая будет выполнять запрос по связке Instruments.Nazvanie_instrumenta - новая таблица - Type_instrumenta.Nazvanie_type_instrumenta .
...
Рейтинг: 0 / 0
Связь таблиц
    #39821381
eleau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

что за функция?
...
Рейтинг: 0 / 0
Связь таблиц
    #39821515
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eleau,
Что за извращение
Код: sql
1.
Kod_instrumenta INT NOT NULL PRIMARY KEY IDENTITY(2,3)


Не взлетит
Код: sql
1.
od_Type_instrumenta INT NOT NULL DEFAULT 'akzii',


Нафиг не нужно
Код: sql
1.
Kod_type_instrumenta INT NOT NULL PRIMARY KEY IDENTITY(1,1),



Масло масляное
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE Type_instrumenta
(
    Kod_type_instrumenta INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    Nazvanie_type_instrumenta VARCHAR(20) NOT NULL DEFAULT 'akzii',
    UNIQUE (Nazvanie_type_instrumenta),
    CHECK (Nazvanie_type_instrumenta IN ('akzii', 'futures'))
);



Итого, таблица type_instuments нафиг не нужна. kod_type_instrumenta тоже не нужен.
Вывод, студент - балбес. Садись, два.
...
Рейтинг: 0 / 0
Связь таблиц
    #39821608
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eleauВладислав Колосов,

что за функция?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- проверка
create function dbo.fn1 (@Nazvanie_instrumenta)
returns int
begin
   if exists (select from b join Type_instrumenta ... where Nazvanie_type_instrumenta = 'futures' and @Nazvanie_instrumenta like ....)
      return (1)
   else
      return (0)
end

check (dbo.fn1() = 1 and )



Как-то так. Но, как писали выше, таблица типов может быть избыточна. Однако, с применением функции можно расширять проверки имён для типов без переписывания кода, если шаблон имени сохранить в таблице типов. В этом случае достаточно будет добавить новый тип с определением шаблона в таблицу типов.
...
Рейтинг: 0 / 0
Связь таблиц
    #39821610
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eleau,

допилите напильником по потребности, за Вас никто решение писать не будет ;)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]