powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
14 сообщений из 14, страница 1 из 1
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34920310
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно узнать мнение специалистов, кто как решает данную задачу. Скорее всего эта ситуация здесь уже обсуждалась.

Есть таблица ACCOUNT

Код: plaintext
1.
2.
3.
4.
create table ACCOUNT
(
	account_id int identity ( 1 ,  1 ) primary key,
	client_name varchar ( 100 ) not null
)

У экаунта может быть несколько профилей

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table PROFILE 
(
	profile_id int identity ( 1 ,  1 ) primary key,
	account_id int not null,
	constraint fk_profile_account foreign key 
	(
		account_id
	) references account 
	(
		account_id
	)
)

И у эккаунта и у профиля есть почтовый адрес. По правилам должна быть единая таблица ADDRESS. Как создать отношения ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34920324
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> И у эккаунта и у профиля есть почтовый адрес

Наймите уже нормального архитектора.
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34920332
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> И у эккаунта и у профиля есть почтовый адрес

Наймите уже нормального архитектора.

обязательно
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34920456
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решёна. Вопрос снят
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34926816
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> И у эккаунта и у профиля есть почтовый адрес

Наймите уже нормального архитектора.

По Вашему совету уволили архитектора. Не знаем, как теперь жить.
Задача такая: компания - пользователь вебсайта создаёт свой экаунт. В пределах этого экаунта есть необходимость позволить компании создавать профайлы для своих сотрудников - агентов по недвижимости. В пределах своих профайлов агенты выставляют на продажу дома. Как у компании в целом, так и каждого агента есть свой почтовый адрес. Как, по Вашему мнению можно решить данную задачу? Очень интересно узнать мнение экспертов.
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34926832
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В отсутствии архитектора решили создать таблицу ADDRESS

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create table ADDRESS 
(
	address_id int identity ( 1 ,  1 ) primary key,
	street_addres_1 varchar ( 500 ) not null,
	street_addres_2 varchar ( 500 ),
	city varchar ( 50 ) not null,
	state_id tinyint not null,
	zip_code numeric( 5 ,  0 ) not null
)

и отдельные таблицы для адресов экаунта

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table ACCOUNT_ADDRESS 
(
	uid int identity ( 1 ,  1 ) primary key,
	account_id int NOT NULL ,
	address_id int NOT NULL ,
	constraint fk_account_address_account foreign key 
	(
		account_id
	) references ACCOUNT (
		account_id
	),
	constraint fk_account_address_address foreign key 
	(
		address_id
	) references ADDRESS (
		address_id
	)
)

и для адресов профайлов

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table PROFILE_ADDRESS 
(
	uid int identity ( 1 ,  1 ) primary key,
	profile_id int NOT NULL,
	address_id int NOT NULL,
	constraint fk_profile_address_address foreign key 
	(
		address_id
	) references ADDRESS 
	(
		address_id
	),
	constraint fk_profile_address_profile foreign key 
	(
		profile_id
	) references [PROFILE] 
	(
		profile_id
	)
)


Является ли это оптимальной схемой организации данных? Мне не нравится. Не знаю почему
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34927017
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
usa_dbaЯвляется ли это оптимальной схемой организации данных? Мне не нравится. Не знаю почемуВрядли.

Создайте единую таблицу адресов - в вашем случае это будет проще.
А везде где нужен адрес - делайте ссылку на адрес по ADDRESS_ID

Что касается организаций и риэлторов.
Я бы все эти сущности хранил в одной таблице USER_ACCOUNT, посколку они особо ничем не различаются, кроме прав и возможных действий.
При этом в таблице организовал иерархическую связь, которая бы указывала подчинение риэлторов какой-то организаци.

Если это, вдруг, окажется независимый риэлтор (сам себе и начальник и продавец) - то вы сможете наделить его правами организации и продавца одновременно.
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34927295
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STFF
2 Bely
дык он так и сделал: create table ADDRESS ... .
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34927326
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRдык он так и сделал: create table ADDRESS ... .А что он сделал потом? :)
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34927457
ev65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Провести черту между понятиями Account и Company (сейчас Client).
2. Оценить возможность генерализации Company и Profile.
3. Если генерализация оправдана, то адрес привязать к супертипу (он -то и будет называться Client, Company или более конркетно RealEstateAgent)
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34929318
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely ModelRдык он так и сделал: create table ADDRESS ... .А что он сделал потом? :)везде где нужен адрес - ссылку на адрес по ADDRESS_ID.
Просто как я понимаю, и ACCOUNT и PROFILE (либо их обобщение) могут иметь несколько адресов.
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34929374
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Не знаем, как теперь жить.

Радоваться. Избавились от балласта.

> компания - пользователь вебсайта создаёт свой экаунт.

Отлично. Согласитесь, что адрес - он у компании, а не у аккаунта.

> позволить компании создавать профайлы для своих сотрудников

Это тоже аккаунты. Если нужно различать типы аккаунтов - различайте. Например, корпоративный и персональный.

> у компании в целом, так и каждого агента есть свой почтовый адрес

Вот ровно так, как сформулировали, и делайте. У аккаунтов нет адресов. Это просто суррогатные идентификаторы. А вот у физических и юридических лиц - сколько угодно.

> Очень интересно узнать мнение экспертов.

Ничего, что я не эксперт?
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34943670
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень интересно. Всем спасибо. Много думал. Телефон уволенного архитектора не отвечает, поэтому начал всё с сначала. Вот, что получилось.

Код: plaintext
1.
2.
3.
4.
5.
create table ACCOUNT
(
	account_id int identity ( 1 ,  1 ) primary key,
	account_type_code tinyint,
	registration_date smalldatetime
)

где account_type_code - корпоративный или индивидуальный

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE [USER] 
(
	userid int IDENTITY ( 1 ,  1 ) primary key,
	account_id int NOT NULL ,
	fname varchar ( 50 ) NOT NULL ,
	mname varchar ( 50 ) NULL ,
	lname varchar ( 50 ) NOT NULL ,
	login varchar ( 50 ) NOT NULL ,
	[password] varchar ( 50 )  NOT NULL ,
	CONSTRAINT FK_USER_ACCOUNT FOREIGN KEY 
	(
		account_id
	) REFERENCES ACCOUNT 
	(
		account_id
	)
)

если корпоративный, то понадобится таблица COMPANY

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE COMPANY 
(
	company_id int primary key,
	company_name varchar ( 100 ) NOT NULL ,
	account_id int NOT NULL ,
	CONSTRAINT FK_COMPANY_ACCOUNT FOREIGN KEY 
	(
		account_id
	) REFERENCES ACCOUNT 
	(
		account_id
	)
)

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

На таблицу ACCOUNT будет ссылаться, например, таблица PAYMENT

В пределах своего экаунта пользователи распределены по ролям с разными привилегиями

Код: 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.
29.
CREATE TABLE ROLE 
(
	role_id tinyint primary key,
	role_desc varchar ( 50 ) NOT NULL ,
	role_type_code tinyint NOT NULL
) 

CREATE TABLE USER_ROLE 
(
	uid int primary key ,
	userid int NOT NULL ,
	role_id tinyint NOT NULL ,
	constraint IX_USER_ROLE unique nonclustered 
	(
		userid,
		role_id
	),
	constraint FK_USER_ROLE_USER foreign key 
	(
		userid
	) references [USER] (
		userid
	),
	constraint FK_USER_ROLE_ROLE foreign key 
	(
		role_id
	) references ROLE (
		role_id
	)
) 

Далее уже знакомая таблица адресов

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE ADDRESS 
(
	address_id int identity primary key,
	street_addres_1 varchar ( 100 ) NOT NULL ,
	street_addres_2 varchar ( 100 ) NULL ,
	city varchar ( 50 ) NOT NULL ,
	state_code tinyint,
	zip_code numeric( 5 ,  0 ),
	country_code tinyint NOT NULL ,
	other_details varchar ( 1000 ),

)

и, наконец, отдельные таблицы для адресов физ лиц и юр лиц

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
CREATE TABLE COMPANY_ADDRESS 
(
	uid int identity primary key,
	company_id int NOT NULL ,
	address_id int NOT NULL ,
	address_type_code tinyint NOT NULL,
	date_address_from smalldatetime NOT NULL ,
	date_address_to smalldatetime NULL ,
	CONSTRAINT FK_ACCOUNT_ADDRESS_ADDRESS FOREIGN KEY 
	(
		address_id
	) REFERENCES ADDRESS 
	(
		address_id
	)
)

CREATE TABLE USER_ADDRESS 
(
	uid int identity primary key,
	useid int NOT NULL ,
	address_id int NOT NULL ,
	address_type_code tinyint NOT NULL,
	date_address_from smalldatetime NOT NULL ,
	date_address_to smalldatetime NULL ,
	CONSTRAINT FK_USER_ADDRESS_ADDRESS FOREIGN KEY 
	(
		address_id
	) REFERENCES ADDRESS 
	(
		address_id
	),
	CONSTRAINT FK_USER_ADDRESS_USER FOREIGN KEY 
	(
		useid
	) REFERENCES [USER] 
	(
		userid
	)
)

Как было правильно замечено выше, адресов может быть несколько и у компаннии, и каждого отдельного агента

Вот, как-то так. Какие огрехи вылезают?
...
Рейтинг: 0 / 0
ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
    #34943687
usa_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потерялся один внешний ключ в таблице COMPANY_ADDRESS

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
alter table COMPANY_ADDRESS 
add constraint FK_COMPANY_ADDRESS_COMPANY foreign key
(
	company_id
) references COMPANY
(
	company_id
)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ACCOUNT -> ADDRESS и PROFILE -> ADDRESS?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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