powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / DDL
22 сообщений из 22, страница 1 из 1
DDL
    #36637963
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, как корректно описать таблицу командами этого языка? Не совсем пойму как правильно делать эти связи, то ли описывать их на уровне ещё одной созданной таблици или же как-то по другому...
Буду благодарен, если кто-то объяснит как правильно это делать, спасибо.
...
Рейтинг: 0 / 0
DDL
    #36637966
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sintx,

Задача состоит именно в создании командами языка DDL базы данных, которая представлена ER-диаграммой.
...
Рейтинг: 0 / 0
DDL
    #36638976
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintx,

у БД нет DLL. DDL это фича СУБД. О какой СУБД идёт речь?
...
Рейтинг: 0 / 0
DDL
    #36638977
A1ek5andr0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintx,
Я бы сделал так:
CLIENT
ID SURNAME NAME

Код: plaintext
1.
2.
3.
4.
5.
create table client(
id number  PRIMARY KEY,
surname varchar2( 50 ),
name varchar2( 50 )
);

ADDRESS
ID CITY ADDRESS

Код: plaintext
1.
2.
3.
4.
5.
create table ADDRESS(
ID number PRIMARY KEY,
city varchar2( 50 ),
address varchar2( 50 )
);

ORDER
ID NAME CNT CLIENT_ID ADDRESS_ID
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table ORDER (
ID number PRIMARY KEY,
name varchar2( 50 ),
cnt number,
client_id number,
address_id number
);

ALTER TABLE ORDER ADD CONSTRAINT ORDER_FK1 FOREIGN KEY (client_id)
	  REFERENCES  CLIENT(id) ENABLE
ALTER TABLE ORDER ADD CONSTRAINT ORDER_FK2 FOREIGN KEY (address_id)
	  REFERENCES  ADDRESS(id) ENABLE

PRODUCT
ID NAME PRICE

Код: plaintext
1.
2.
3.
4.
5.
create table PRODUCT (
id number,
name varchar2( 50 ),
price number
);

ORDER_PRODUCT_LINK
ORDER_ID PRODUCT_ID

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table ORDER_PRODUCT_LINK (
order_id number,
product_id number
);

ALTER TABLE ORDER_PRODUCT_LINKADD CONSTRAINT ORD_PR_LNK_FK1 FOREIGN KEY (order_id)
	  REFERENCES  ORDER(id) ENABLE
ALTER TABLE ORDER_PRODUCT_LINKADD CONSTRAINT ORD_PR_LNK_FK2 FOREIGN KEY (product_id)
	  REFERENCES  PRODUCT(id) ENABLE
...
Рейтинг: 0 / 0
DDL
    #36638994
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A1ek5andr0,

ORDER_PRODUCT_LINK - лишняя таблица. Её нет в модели.
...
Рейтинг: 0 / 0
DDL
    #36639010
A1ek5andr0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab,

Я вижу) Я бы поменял модель.
...
Рейтинг: 0 / 0
DDL
    #36639017
A1ek5andr0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A1ek5andr0,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table ORDER_PRODUCT_LINK (
order_id number,
product_id number
);

ALTER TABLE ORDER_PRODUCT_LINK ADD CONSTRAINT ORD_PR_LNK_FK1 FOREIGN KEY (order_id)
	  REFERENCES  ORDER(id) ENABLE
ALTER TABLE ORDER_PRODUCT_LINK ADD CONSTRAINT ORD_PR_LNK_FK2 FOREIGN KEY (product_id)
	  REFERENCES  PRODUCT(id) ENABLE

...
Рейтинг: 0 / 0
DDL
    #36639062
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A1ek5andr0mcureenab,

Я вижу) Я бы поменял модель.

Хм. Если эта модель создана для учёта статистики заказов по адресу или отражает ограничения бизнеса (на адрес одна копупка наименования товара в руки), не вижу резона её менять.

И с NOT NULL нужно разобраться. А то выходит, что заказ может быть без товара и клиента.
...
Рейтинг: 0 / 0
DDL
    #36639213
A1ek5andr0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab,
Как вариант - ограничивать наличие товаров в заказе на уровне бизнес-логики.
А остальное:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table ORDER (
ID number PRIMARY KEY,
name varchar2( 50 ),
cnt number,
client_id number not null,
address_id number
);


--Статистика заказов по адресу:
select o.name, 
       o.address_id, 
       count( 1 ) summ
from order o
group by o.address_id, o.name;
...
Рейтинг: 0 / 0
DDL
    #36639413
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нотация Баркера.

Код: plaintext
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.
create table client(
id number PRIMARY KEY,
surname varchar2( 50 ),
name varchar2( 50 )
);

create table PRODUCT (
id number PRIMARY KEY,
name varchar2( 50 ) not null,
price number
);

create table ORDER (
client_id number not null REFERENCES CLIENT,
product_id number not null REFERENCES PRODUCT,
primary key (client_id, product_id),
name varchar2( 50 ) not null,
cnt number
);

create table ADDRESS(
ID number not null PRIMARY KEY,
client_id number not null,
product_id number not null,
unique(client_id, product_id),
foreign key (client_id, product_id) references ORDER,
city varchar2( 50 ) not null,
address varchar2( 50 ),
);
Типы данных отбалды выбраны.
...
Рейтинг: 0 / 0
DDL
    #36639502
A1ek5andr0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab,

Да. У Вас ближе к ТЗ) Почитал про нотацию - очень познавательно. Спасибо.
...
Рейтинг: 0 / 0
DDL
    #36640050
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, что откликнулись. Просто прочел, что связи преобразуются один ко многим и многие ко многим в отдельные таблицы. В другом месте -- что можно это сделать на уровне таблицы. Не знал как правильно преобразовать связи без использования дополнительных таблиц.
...
Рейтинг: 0 / 0
DDL
    #36640054
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по поводу СУБД, то это ORACLE. Используется 2 версии - 8 и 10.
...
Рейтинг: 0 / 0
DDL
    #36640139
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintxСпасибо, что откликнулись. Просто прочел, что связи преобразуются один ко многим и многие ко многим в отдельные таблицы. В другом месте -- что можно это сделать на уровне таблицы. Не знал как правильно преобразовать связи без использования дополнительных таблиц.

любые допустимые связи можно реализовать на отдельных таблицах. связь многие ко многим можно реализовать только на отдельной таблице. остальные связи можно реализовать атрибутами той или иной сущности, но это не всегда оправдано, с точки зрения структуры БД.
однако кардинальность связи не всегда можно описать декларативными ограничениями целостности.
...
Рейтинг: 0 / 0
DDL
    #36640151
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, понял. То есть получается, что при случае, когда имеем связь многие ко многим, то её описать можно только дополнительной таблицей и никак иначе, верно ?
...
Рейтинг: 0 / 0
DDL
    #36640155
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблемы с пониманием создания связей. Некоторые вещи понятны, а некоторые не сильно. Просто опять-таки в разных источниках по разному и посему тяжело понять как корректно описывать связи такого рода как на диаграммах, в том числе многие ко многим.
...
Рейтинг: 0 / 0
DDL
    #36640161
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно, если не тяжело, описать связь многие ко многим, хочется просто четко уяснить. Допустим между любыми двумя таблицами на диаграмме.
Спасибо за пояснения.
...
Рейтинг: 0 / 0
DDL
    #36640290
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М:М - стандартное решение через промежуточную кросс-таблицу, содержащую ФК на первую и ФК на вторую таблицу.
...
Рейтинг: 0 / 0
DDL
    #36640313
sintx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В теории я знаю что и как это, я написал, что желательно пример, так как в инете толком нормального нету построения по ER-диаграмме.
...
Рейтинг: 0 / 0
DDL
    #36640345
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintxВ теории я знаю что и как это, я написал, что желательно пример, так как в инете толком нормального нету построения по ER-диаграмме. да ну?
...
Рейтинг: 0 / 0
DDL
    #36641192
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintxа можно, если не тяжело, описать связь многие ко многим, хочется просто четко уяснить. Допустим между любыми двумя таблицами на диаграмме.

"Клиент" - "Товар". "Заказ" может быть примером реализацией такой связи.
...
Рейтинг: 0 / 0
DDL
    #36641220
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sintxВ теории я знаю что и как это, я написал, что желательно пример, так как в инете толком нормального нету построения по ER-диаграмме.

БД по ER диаграмме можно разные построить. В реляционной СУБД это одна схема, в объектной СУБД - другая. А ещё с целью оптимизации сущности и связи могут отображаться на таблицы не 1:1. Стандартные алгоритмы отображения ER диаграммы на модель данных даёт только первое приближение модели данных. Потом её оптимизируют.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / DDL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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